【发布时间】:2014-01-03 02:07:44
【问题描述】:
我正在制作一个带有自定义精灵类(不是 pygame.Sprite)的自上而下的横向滚动瓷砖游戏。
sprite collide() 函数导致帧率下降(我使用了cProfile)。
请帮我找出问题。
函数以这种一般方式运行:
def collide(self):
for tile in tiles:
if tile.type == 'wall':
if self.getDist(tile.rect.center) < 250:
if self.rect.colliderect(tile.rect):
return True
- 查找精灵与所有墙砖之间的距离向量非常耗时
- 我认为只为 250 像素内的图块运行
rect.colliderect()会更快;但显然不是。 - 我没有包含源代码,因为我正在寻找更多关于我的碰撞检测效率低下问题的概念性答案。
一种可能的解决方案是为不同的图块组(即wallList、groundList)创建单独的列表,但是,我真的认为我在图块对象列表中搜索的方式存在根本问题。
我是 StackOverflow 的新手,所以,如果我的问题结构/缺少源代码冒犯了您,请见谅。
【问题讨论】:
-
哇。代码格式确实发生了最坏的转变。对不起!
-
在代码前添加 4 个空格以使其格式正确
-
@user3155622 我编辑了,你可以点击
edit查看源代码,看看如何正确格式化。 -
@Nabla 我检查过了。这很有帮助,谢谢。
-
我不会将此作为答案发布,因为我对游戏开发一无所知,但瓷砖地图的想法不会是,整个地图被分成固定的瓷砖坐标,所以您只需要检查目标图块(及其邻居)是否可访问,消除所有循环?