我正在使用 pygame 库。我有 Actor 类(用于游戏对象)和 ActorContext 类(用于游戏对象列表):
class ActorContext:
list = []
alpha_range = 255
time_diff = 0
alpha_diff = 0
def add(self, obj: Actor):
self.list.append(obj)
在我的主应用中,我定义了对象:
enemy_context = ActorContext()
bullet_context = ActorContext()
dummy_context = ActorContext()
稍后,在一个循环中,我创建对象并将其添加到这些上下文中:
if event.key == pg.K_e:
e = Enemy(img_src=enemy)
e.rand_change()
e.rand_pos()
enemy_context.add(e)
if event.key == pg.K_r:
if len(enemy_list) > 0:
enemy_context.remove(1)
问题是,当我调用 enemy_context.add(e)
时,在所有 对象列表中添加了相同的值:emergent_context、bullet_context 和 dummy_context
答案 0 :(得分:2)
每个实例的属性应该在 __init__
方法中初始化,而不是作为类属性。
class ActorContext:
alpha_range = 255
time_diff = 0
alpha_diff = 0
def __init__(self):
self.list = []
def add(self, obj: Actor):
self.list.append(obj)
答案 1 :(得分:0)
你应该这样调整你的班级:
class ActorContext:
alpha_range = 255
time_diff = 0
alpha_diff = 0
def __init__(self):
self.list = []
def add(self, obj: Actor):
self.list.append(obj)
这确保 list
是一个实例属性,而不是一个类属性。它现在对于 ActorContext
的所有实例都是分开的。
__init__(self)
函数就是所谓的 constructor
- 每当您创建相关对象的实例时调用的特殊函数,例如 ActorContext()
。
答案 2 :(得分:0)
尝试像这样定义你的类 ActorContext :
class ActorContext:
def __init__(self):
self.list = []
self.alpha_range = 255
self.time_diff = 0
self.alpha_diff = 0
def add(self, obj: Actor):
self.list.append(obj)
有效果吗?