Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 pygame如何创建包含其他组的父精灵组_Python_Pygame - Fatal编程技术网

Python pygame如何创建包含其他组的父精灵组

Python pygame如何创建包含其他组的父精灵组,python,pygame,Python,Pygame,所以我在pygame中有一个包含所有精灵的all_精灵组。为了做到这一点,我只是让他们在开始时就在那个小组里。还有暴徒,他们和所有精灵都在暴徒组中。我使用update()函数使它们与所有其他精灵一起更新: self.all_sprites.update() 简单的东西。但是我只想更新玩家周围区域的怪物,这样我就可以 self.all_sprite.add(Mob) self.all_sprite.remove(Mob) 如果它们在或不在区域中,这很简单,但是删除函数比空函数慢很多,事实上我使

所以我在pygame中有一个包含所有精灵的all_精灵组。为了做到这一点,我只是让他们在开始时就在那个小组里。还有暴徒,他们和所有精灵都在暴徒组中。我使用update()函数使它们与所有其他精灵一起更新:

self.all_sprites.update()
简单的东西。但是我只想更新玩家周围区域的怪物,这样我就可以

self.all_sprite.add(Mob)
self.all_sprite.remove(Mob)
如果它们在或不在区域中,这很简单,但是删除函数比空函数慢很多,事实上我使用

self.walls.empty()
在每次循环之前,只需在屏幕内部添加墙,它就像一个魅力。但是墙没有更新功能,所以我的问题来了,我想如果我清空我的mobs组,它也会删除all_精灵组中的mobs,就像父组一样,如果我在mobs组中添加一个mob,它会向all_精灵添加一个mob。所有这些都不需要在pygame中使用remove()函数,因为它很慢。我有办法做到这一点吗


很抱歉没有提供完整的代码,它有点大(约50KB的文本)但是我相信我的例子已经足够了。

如果怪物不在区域内,不要将他们从精灵组中移除,而是在他们的
更新方法中添加一个条件语句,以确保只有在与玩家的距离低于所需阈值时才更新,例如:

def update(self):
    if distance_to_player < 150:
        # Rest of the update code ...
def更新(自):
如果与玩家之间的距离小于150:
#其余的更新代码。。。

您可能需要在mob实例中存储对玩家的引用以计算距离。

如果怪物不在区域内,请不要将其从精灵组中移除,而是向其
更新
方法添加一条条件语句,以确保仅当与玩家的距离低于所需距离时才更新阈值,例如:

def update(self):
    if distance_to_player < 150:
        # Rest of the update code ...
def更新(自):
如果与玩家之间的距离小于150:
#其余的更新代码。。。

你可能需要在mob实例中存储一个对玩家的引用来计算距离。

是的,我已经有了更新的条件,遗憾的是,即使更新不起任何作用,也只是调用他们的更新,当有很多(几千)时,这会让我损失一些fps,我想找到一种方法,完全绕过更新呼吁为暴徒团体,如果他们不在屏幕上,谢谢你的回答tho!好的,这是重要的信息,应该在问题中,而不是在评论中。对于优化问题没有简单的解决方案,我不确定在pygame和Python中使用如此多的精灵是否能获得良好的性能。可能会对你有帮助。我想有人已经为pygame编写了一个四叉树模块。也许你也必须切换游戏库/引擎,如果没有任何帮助的话,就使用Cython作为代码的关键部分(使用探查器查找程序中的热点)。我将研究Cython,我已经做了局部分区,我的程序即使地图是8192x8192,也保持60 fps,即使有20个怪物追着你跑(变得兴奋起来)但是当地图上有成千上万的暴徒(不更新也不获取blit)并且有20多个暴徒追赶你时,速度会达到40-45 fps,我已经使用了cProfile,它告诉我,更新功能每10秒被调用近50万次,即使更新不起任何作用,也是让我滞后的原因:/是的,我已经有了他们更新的条件,不幸的是,当有很多(几千)更新时,我只是调用他们的更新,即使它不起任何作用这让我失去了一点新鲜粮食店,我想找到一种方法,完全绕过更新呼吁为暴徒团体,如果他们不在屏幕上,谢谢你的回答tho!好的,这是重要的信息,应该在问题中,而不是在评论中。对于优化问题没有简单的解决方案,我不确定在pygame和Python中使用如此多的精灵是否能获得良好的性能。可能会对你有帮助。我想有人已经为pygame编写了一个四叉树模块。也许你也必须切换游戏库/引擎,如果没有任何帮助的话,就使用Cython作为代码的关键部分(使用探查器查找程序中的热点)。我将研究Cython,我已经做了局部分区,我的程序即使地图是8192x8192,也保持60 fps,即使有20个怪物追着你跑(变得兴奋起来)但是当地图上有成千上万的暴徒(不更新也不获取blit)并且有20个暴徒在追你时,它会以40-45 fps的速度出现。我已经使用了cProfile,它告诉我,更新功能每10秒调用近50万次,即使更新不起任何作用,也是让我滞后的原因:/