Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python优化形状重叠检测_Python_Python 3.x_Optimization_Pygame_List Comprehension - Fatal编程技术网

Python优化形状重叠检测

Python优化形状重叠检测,python,python-3.x,optimization,pygame,list-comprehension,Python,Python 3.x,Optimization,Pygame,List Comprehension,我一直在使用Pygame在Python中开发一个基于平铺的platformer。在将图块放大之后,我经历了一次性能的大幅下降。我使用了一个分析器来查找速度减慢的原因,它指向了我用来检查屏幕上有哪些磁贴的列表 [i for i in sprites if (i.rect.x-pos.x)+(WIDTH/2)+i.w>0 and (i.rect.x-pos.x)+(WIDTH/2) < WIDTH and (i.rect.y-pos.y)+(HEIGHT/

我一直在使用Pygame在Python中开发一个基于平铺的platformer。在将图块放大之后,我经历了一次性能的大幅下降。我使用了一个分析器来查找速度减慢的原因,它指向了我用来检查屏幕上有哪些磁贴的列表

[i for i in sprites
     if (i.rect.x-pos.x)+(WIDTH/2)+i.w>0
     and (i.rect.x-pos.x)+(WIDTH/2) < WIDTH 
     and (i.rect.y-pos.y)+(HEIGHT/2)+i.h>0
     and (i.rect.y-pos.y)+(HEIGHT/2) < HEIGHT]

有没有办法优化这个?任何有助于它更快完成任务的方法都会有所帮助。

将屏幕大小设置为矩形,并使用内置碰撞检测:

[i for i in sprites if i.rect.colliderect(screen_rect)]
事实证明,有一个没有列表的理解,可能更快:

spritecollide(screen, sprites, True, collided = None)

将屏幕大小设置为矩形,并使用内置碰撞检测:

[i for i in sprites if i.rect.colliderect(screen_rect)]
事实证明,有一个没有列表的理解,可能更快:

spritecollide(screen, sprites, True, collided = None)
将条件重写为-i.w 如果可能,请使用生成器表达式而不是列表压缩。它肯定会减少内存使用

事实上,您的条件可能会以向量形式dim=2重写,SIMD在这里可能很有用。探索这个机会

将条件重写为-i.w 如果可能,请使用生成器表达式而不是列表压缩。它肯定会减少内存使用

事实上,您的条件可能会以向量形式dim=2重写,SIMD在这里可能很有用。探索这个机会


这怎么会更快?@Qwerty根据我的经验,编写的函数总是比现有函数差。此外,实际上没有其他方法可以优化代码,因为这实际上是所有可用的代码。那么,您是否更快地测试和验证了它,或者您只是assuming@Qwerty你没有一个有效的例子,你希望我写一个完整的游戏只是为了检查一行代码吗?很可能pygame的作者在游戏的基本功能上投入了很多精力,比如碰撞检测。这怎么会更快呢?@Qwerty根据我的经验,编写的函数总是比现有的函数差。此外,实际上没有其他方法可以优化代码,因为这实际上是所有可用的代码。那么,您是否更快地测试和验证了它,或者您只是assuming@Qwerty你没有一个有效的例子,你希望我写一个完整的游戏只是为了检查一行代码吗?很可能pygame的作者在游戏的基础上投入了大量的精力,比如碰撞检测。正如@Nathan的回答所表明的,这是an。你问过如何加快你的理解速度,但你真正想要的是一种更有效的检测形状重叠的方法。你要求加快你的理解速度,但你真正想要的是一种更有效的检测形状重叠的方法。你能解释一下你的上一种方法吗?-i.w