我正在用pygame编写一个2D游戏引擎,我一直在写产卵类。 我想要实现的是一种创建产卵器的简单方法,比如:
bullet = Bullet()
spawner = Spawner()
spawner.set_spawn_object(bullet)
我正在使用复制.deepcopy内部集合\u生成\u对象
基本上我想传递一个对象到产卵器,它应该复制那个对象并保存那个副本。然后每n秒它将通过复制到游戏对象的全局列表来产生该对象,这些对象被渲染、碰撞等。我需要一个deepcopy,因为我想以后单独修改它们(例如位置、名称、纹理)。问题是曲面不能以这种方式复制。你知道吗
现在,我的游戏引擎中的每个对象都有自己的曲面,我计划做的是将所有曲面保存在一个单独的类中,以提高效率。这可以解决这个问题,因为我不会复制曲面。但是。。。你知道吗
假设我有一个项目符号和一个资源管理器对象。 项目符号有一个指向资源的指针_manager.bullet\u纹理(这是一个pygame.表面)。你知道吗
那我就可以了
bullet2=copy.deepcopy(bullet)
因为我要复制的是指针,而不是曲面本身。你知道吗
问题是python没有指针,所以我应该怎么做?你知道吗
不能在
pygame.Surface
上使用copy
模块,但Surface
有自己的Surface.copy方法。你知道吗您可以为类定义一个
copy
方法,该方法使用Surface实例的Surface.copy
方法创建一个包含所有所需属性副本的新实例。你知道吗如果有很多属性,可以使用特殊的内置属性
__dict__
:它包含一个属性(键)及其值的字典,您可以循环使用它,为每个属性分配一个原始属性的副本。你知道吗一个非常简单的例子:
现在如果你这样做了:
myobj2
是myobj
的“副本”。它的image和rect是具有相同值的不同实例,您可以安全地编辑后者,而前者保持不变。你知道吗因此,如果您想创建一个产卵器,产卵器可能会调用传递对象的
copy
方法。你知道吗相关问题 更多 >
编程相关推荐