for循环中的动作不影响组中的所有精灵
Acton in for loop not affecting all sprites in a group
试图制作一个 space 入侵者风格的游戏,我想使用 for 循环影响所有敌人 - 但是根据显示的代码,我得到一个逻辑错误,其中只有第一个敌人受到影响,并且只有第一个敌人可以access/use敌人class内的enemy.moveLR()方法。 class 的方法没有突出显示为黄色,VS Code 的智能感知也没有将其拾取。
关于敌人的代码:
class Enemy(pygame.sprite.Sprite):
def __init__(self,path):
super().__init__()
self.image = pygame.image.load(path)
self.rect = self.image.get_rect()
self.xChange = 0
self.hp = 0
def moveLR(self):
if self.rect.x >= 750 and self.xChange > 0:
self.xChange = -5
self.rect.y = self.rect.y +30
if self.rect.x <= 0 and self.xChange < 0:
self.xChange = 5
self.rect.y = self.rect.y +30
还有我的主循环,包括不起作用的代码:
(最后的 for 循环)
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.MOUSEBUTTONDOWN:
bullet = Bullet('bullet.png')
allActiveSpritesList.add(bullet)
bulletList.add(bullet)
bullet.rect.x = player.rect.x + 45
bullet.rect.y = player.rect.y
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
player.goLeft()
if event.key == pygame.K_d:
player.goRight()
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or pygame.K_d:
player.stop()
player.rect.x += player.changeX
player.rect.y += player.changeY
enemy.rect.x += enemy.xChange
timer = timer + 1
for enemy in enemyList:
enemy.moveLR()
感谢任何能提供帮助的人。
你必须移动enemyList.
中的所有敌人移动循环中的enemy
:
# enemy.rect.x += enemy.xChange <-- DELETE
timer = timer + 1
for enemy in enemyList:
enemy.rect.x += enemy.xChange # <-- INSERT
enemy.moveLR()
我建议在moveLR
方法中完成所有动作:
class Enemy(pygame.sprite.Sprite):
# [...]
def moveLR(self):
self.rect.x += self.xChange # <---
if self.rect.x >= 750 and self.xChange > 0:
self.xChange = -5
self.rect.y = self.rect.y +30
if self.rect.x <= 0 and self.xChange < 0:
self.xChange = 5
self.rect.y = self.rect.y +30
for enemy in enemyList:
enemy.moveLR()
试图制作一个 space 入侵者风格的游戏,我想使用 for 循环影响所有敌人 - 但是根据显示的代码,我得到一个逻辑错误,其中只有第一个敌人受到影响,并且只有第一个敌人可以access/use敌人class内的enemy.moveLR()方法。 class 的方法没有突出显示为黄色,VS Code 的智能感知也没有将其拾取。
关于敌人的代码:
class Enemy(pygame.sprite.Sprite):
def __init__(self,path):
super().__init__()
self.image = pygame.image.load(path)
self.rect = self.image.get_rect()
self.xChange = 0
self.hp = 0
def moveLR(self):
if self.rect.x >= 750 and self.xChange > 0:
self.xChange = -5
self.rect.y = self.rect.y +30
if self.rect.x <= 0 and self.xChange < 0:
self.xChange = 5
self.rect.y = self.rect.y +30
还有我的主循环,包括不起作用的代码: (最后的 for 循环)
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.MOUSEBUTTONDOWN:
bullet = Bullet('bullet.png')
allActiveSpritesList.add(bullet)
bulletList.add(bullet)
bullet.rect.x = player.rect.x + 45
bullet.rect.y = player.rect.y
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
player.goLeft()
if event.key == pygame.K_d:
player.goRight()
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or pygame.K_d:
player.stop()
player.rect.x += player.changeX
player.rect.y += player.changeY
enemy.rect.x += enemy.xChange
timer = timer + 1
for enemy in enemyList:
enemy.moveLR()
感谢任何能提供帮助的人。
你必须移动enemyList.
中的所有敌人移动循环中的enemy
:
# enemy.rect.x += enemy.xChange <-- DELETE
timer = timer + 1
for enemy in enemyList:
enemy.rect.x += enemy.xChange # <-- INSERT
enemy.moveLR()
我建议在moveLR
方法中完成所有动作:
class Enemy(pygame.sprite.Sprite):
# [...]
def moveLR(self):
self.rect.x += self.xChange # <---
if self.rect.x >= 750 and self.xChange > 0:
self.xChange = -5
self.rect.y = self.rect.y +30
if self.rect.x <= 0 and self.xChange < 0:
self.xChange = 5
self.rect.y = self.rect.y +30
for enemy in enemyList:
enemy.moveLR()