python - 如何提高游戏物理的嵌套 for 循环的速度

标签 python python-3.x time-complexity game-physics

我正在用 python 制作一个游戏(特别是使用 pygame 来渲染),在我的物理引擎中我遇到了 O(n^2) 问题。 在我的引擎对象中:

def step():

    for obj1 in self.objects:
        for obj2 in self.objects:
            if obj1.XY != obj2.XY: # You can't have the object bounce itself
                obj1,obj2 = Collision(obj1,obj2)

每次游戏循环运行时都会发生这些循环 当有 100 多个对象(总共 10000 次迭代)时,嵌套的 for 循环确实会降低 fps。 我想知道是否有一种更快的方法来迭代所有可能的组合并将函数应用于该对

最佳答案

解决这个问题的方法是使用更智能的数据结构,这样你的算法就不再是二次的。

一般情况下研究空间划分,特别是四叉树 ( https://en.wikipedia.org/wiki/Quadtree )(如果您正在执行 2D - 3D 等效项是八叉树: https://en.wikipedia.org/wiki/Octree )。

关于python - 如何提高游戏物理的嵌套 for 循环的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31485421/

相关文章:

python - Docker 撰写脚本提示 python 模块导入

python - 根据时间列的内容分离 Pandas 数据框

python - refextract 导入问题 : syntax error

python-3.x - 在 GOOGLE COLAB 中运行开放式 AI 健身房时出现 NameError : name 'base' is not defined,

algorithm - 这些算法的最佳和最坏情况分析是什么?

python - 当使用重复参数而不是链接过滤器时,如何对 Q 对象进行 AND 查找?

python - 事务回滚和不提交之间(在 MySQL 中)有什么区别?

python - 如何在 Python 中对列表中的单词进行编码

time-complexity - sleep 排序的时间复杂度是多少?

在 1,000,000,000 个元素中搜索一个键的算法,该键位于前 n 个索引中,而没有事先指定 n