Python优化形状重叠检测

标签 python python-3.x optimization pygame list-comprehension

我一直在使用 Pygame 在 Python 中开发基于图 block 的平台游戏。将图 block map 变大后,我的性能大幅下降。我使用分析器找到了速度下降的原因,它指出了我用来检查屏幕上有哪些图 block 的列表理解。

[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)]

原来有一个actual function for this没有列表理解,可能会更快:

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

关于Python优化形状重叠检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49565835/

相关文章:

python - 尝试将两个数据帧相互连接,但遇到索引值和长度不匹配的问题

python - pygame.event.Event().type == pygame.QUIT,困惑

python - 在 Python 上计算三分之一

python - 如何根据给定索引制作二维列表大写字母的元素?

c++ - vector 初始化比数组慢......为什么?

python - 运行时错误 : working outside of request context When request used in first line of method

python - 在 Python3 中解析 JSON 响应

python-3.x - 使用 Candlestick_OHLC 绘制图表

optimization - 使用 __builtin_expect 的指南

ruby - 我如何优化这段 ruby​​ 代码以使其运行得更快?