移除和删除附加对象 - python
Removing and deleting appended object - python
使用下面的代码,我可以让附加的精灵在单击时从列表中删除和删除,但遗憾的是,这不是我需要的。我已经用它搞了几个小时,试图让它在循环移动 class 15 次后自动删除并从列表中删除。 (如果你需要它来帮助我,我可以提供。
class projectilesGroup(object):
def __init__(self, canvas):
self.canvas = canvas
self.projectiles = list()
self.moving = True
def clicked(self, event, projectile):
print('clicked:', projectile),
# remove oval from canvas
self.canvas.delete(projectile.oval)
# remove enemy from list
self.projectiles.remove(projectile)
def add_new_projectile(self):
print(len(self.projectiles))
if len(self.projectiles) < 5:
e = projectile(self.canvas)
# stop new enemy if all enemies are stoped
e.moving = self.moving
self.canvas.tag_bind(e.oval, '<Button-1>', lambda event:self.clicked(event, e))
self.projectiles.append(e)
else:
print("You have 5 spells active - I can't add more.")
谢谢。
def move(self):
if repcount < 15:
if self.moving: # to stop root.after
if self.direction == 1: # up
self.y1 -= self.radius
self.y2 -= self.radius
elif self.direction == 2: # down
self.y1 += self.radius
self.y2 += self.radius
elif self.direction == 3: # left
self.x1 -= self.radius
self.x2 -= self.radius
elif self.direction == 4: # right
self.x1 += self.radius
self.x2 += self.radius
self.canvas.coords(self.oval, self.x1, self.y1, self.x2, self.y2)
repcount += 1
root.after(20, self.move)
else:
print('done')
首先,每个对象都需要变量来计算运动。当 counter
计数到 15 时,对象可以自行移除。
对象可以轻松地从 canvas 中删除椭圆形,因为它有 self.oval
和 self.canvas
。
小问题可以是从 projectlist
中删除对象,但您可以授予对 projectlist
的访问权限:
e = projectile(self.canvas, self.projectiles)
编辑:可以这样做
class ProjectilesGroup(object):
# ...
def clicked(self, event, projectile):
print('clicked:', projectile),
self.remove(projectile)
def remove(self, projectile):
# remove oval from canvas
self.canvas.delete(projectile.oval)
# remove enemy from list
self.projectiles.remove(projectile)
def add_new_projectile(self):
print(len(self.projectiles))
if len(self.projectiles) < 5:
e = Projectile(self, self.canvas) #parent and canvas
# ...
class Projectile():
def __init__(self, parent, canvas):
self.parent = parent
self.canvas = canvas
# ...
def move(self):
# ....
else:
print('done')
self.parent.remove(self)
顺便说一句:在文档 PEP8
中建议使用 "CamelCase" class 名称 - 如 Projectile 和 ProjectilesGroup。在代码中识别 class 更容易。一些编辑器甚至为 CamelCase 名称使用不同的颜色(所以使用蓝色)
使用下面的代码,我可以让附加的精灵在单击时从列表中删除和删除,但遗憾的是,这不是我需要的。我已经用它搞了几个小时,试图让它在循环移动 class 15 次后自动删除并从列表中删除。 (如果你需要它来帮助我,我可以提供。
class projectilesGroup(object):
def __init__(self, canvas):
self.canvas = canvas
self.projectiles = list()
self.moving = True
def clicked(self, event, projectile):
print('clicked:', projectile),
# remove oval from canvas
self.canvas.delete(projectile.oval)
# remove enemy from list
self.projectiles.remove(projectile)
def add_new_projectile(self):
print(len(self.projectiles))
if len(self.projectiles) < 5:
e = projectile(self.canvas)
# stop new enemy if all enemies are stoped
e.moving = self.moving
self.canvas.tag_bind(e.oval, '<Button-1>', lambda event:self.clicked(event, e))
self.projectiles.append(e)
else:
print("You have 5 spells active - I can't add more.")
谢谢。
def move(self):
if repcount < 15:
if self.moving: # to stop root.after
if self.direction == 1: # up
self.y1 -= self.radius
self.y2 -= self.radius
elif self.direction == 2: # down
self.y1 += self.radius
self.y2 += self.radius
elif self.direction == 3: # left
self.x1 -= self.radius
self.x2 -= self.radius
elif self.direction == 4: # right
self.x1 += self.radius
self.x2 += self.radius
self.canvas.coords(self.oval, self.x1, self.y1, self.x2, self.y2)
repcount += 1
root.after(20, self.move)
else:
print('done')
首先,每个对象都需要变量来计算运动。当 counter
计数到 15 时,对象可以自行移除。
对象可以轻松地从 canvas 中删除椭圆形,因为它有 self.oval
和 self.canvas
。
小问题可以是从 projectlist
中删除对象,但您可以授予对 projectlist
的访问权限:
e = projectile(self.canvas, self.projectiles)
编辑:可以这样做
class ProjectilesGroup(object):
# ...
def clicked(self, event, projectile):
print('clicked:', projectile),
self.remove(projectile)
def remove(self, projectile):
# remove oval from canvas
self.canvas.delete(projectile.oval)
# remove enemy from list
self.projectiles.remove(projectile)
def add_new_projectile(self):
print(len(self.projectiles))
if len(self.projectiles) < 5:
e = Projectile(self, self.canvas) #parent and canvas
# ...
class Projectile():
def __init__(self, parent, canvas):
self.parent = parent
self.canvas = canvas
# ...
def move(self):
# ....
else:
print('done')
self.parent.remove(self)
顺便说一句:在文档 PEP8
中建议使用 "CamelCase" class 名称 - 如 Projectile 和 ProjectilesGroup。在代码中识别 class 更容易。一些编辑器甚至为 CamelCase 名称使用不同的颜色(所以使用蓝色)