python - Python附加到错误的列表?
问题描述
我无法理解这个问题。我有一个Player
对象和一些都从类Enemy
继承的对象。Actor
两者Player
都有让他们射出子弹的方法Enemy
。shoot(self)
这个子弹应该被添加到他们各自的射弹列表中,但是当程序调用self.projectiles.append(Projectile())
一个敌人时,它会将它添加到玩家的射弹列表中。
我已经运行了一个程序,其中射击任何子弹的唯一 Actor 是敌人,我观察到len(player.projectiles)
返回越来越大的值,即使它不应该增长。任何帮助表示赞赏。每次程序更新时,此块都会运行,它会遍历Game
对象的敌人列表并分别更新每一个:
for enemy in self.enemies:
enemy.update(self.player)
这是Enemy
课程:
class Enemy(Actor):
def shoot(self):
image = pygame.transform.rotate(ProjectileImage, self.angle)
self.projectiles.append(Projectile(self.getCenter()[0] - 6, self.getCenter()[1] - 16, 12, 32, image, 5, self.angle, True))
shootingSound.play()
def tryToShoot(self):
if self.attackCoolDown >= 30:
self.attackCoolDown = 0
self.shoot()
def update(self, player):
self.pointTowards(player.x, player.y)
Actor.update(self)
self.tryToShoot()
类Actor
初始化projectiles
:
class Actor(Entity):
projectiles = []
解决方案
您发布的代码显示projectiles
为类属性,而不是实例属性。因此,所有Actor
s 共享一个projectiles
列表。要制作单独的列表,请在方法内初始化属性__init__
。
推荐阅读
- html - 将本地 .html 文件导入 Excel 的宏
- r - 将日期列从因子转换为 posixct 使我的数据框的长度和大小为零
- c++ - 根据窗口大小动态更改 QToolButtons 的 ToolButtonStyle
- python - 关于在 Python 中将字符串转换为浮点数的一致类型错误
- job-scheduling - 使用可变资源映射对作业调度问题进行建模
- python - 如何在没有 kv 文件的情况下打开新的 kivy 屏幕?
- c# - 尝试使用 C# 通过 FTP 上传文件时出错
- r - ggplot:x轴标签与用于美学的数据不同
- java - 如何使用Lamda表达式java 8过滤两张地图并制作第三张地图
- python-3.x - 添加未在 ElasticSearch 索引中显示的新文档