gpt4 book ai didi

python - Pygame 从组中删除单个 Sprite

转载 作者:太空狗 更新时间:2023-10-30 02:02:33 29 4
gpt4 key购买 nike

我正在制作游戏,当 Sprite 在 x 轴上低于 100 时,它应该被删除。 Sprite 都位于一个类中。当第一个 Sprite 到达终点时,它会删除该组的最后一个 Sprite 而不是第一个。

敌类

class Enemy(pygame.sprite.Sprite): 
def __init__(self,x,y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('Enemy.gif').convert()
self.rect = self.image.get_rect(x=x, y=y)

def update(self):
self.rect.x -= 4

def die(self):
for enemy in EnemyList:
if enemy.rect.x<100:
EnemyList.remove(enemy)

def draw(self, DISPLAY):
DISPLAY.blit(self.image, self.rect)

主循环(敌人部分)

time = 0
while not Gameover: #Loop of the gameplay
if time in (0,50,100,150,200):
enemy = Enemy(DIS_HEIGHT,random.randrange(0,DIS_HEIGHT)
enemy.add(EnemyList)
EnemyList.update()
EnemyList.draw(DISPLAY)
enemy.die()
time +=1

我有背景,其他一切正常,我就是无法从敌人组中删除正确的 Sprite 。

最佳答案

一种更简单的方法是使用 Sprite 方法 kill(),它从当前所在的所有 pygame.sprite.Group 中删除一个 Sprite 。

def die(self):
if self.rect.x < 100:
self.kill()

在你的 update() 中调用 die() 将允许你检查是否在每个游戏循环中杀死你的 Sprite ,但考虑到 中的代码量die() 你可以简单地将代码移动到 update() 中。根据您当前的代码,您的 EnemyList 已经是一个 pygame.sprite.Group 对象,因此无需对其进行更改。

您当前的die() 方法对我来说很难理解。您正在创建一个敌人,它会检查所有敌人(它自己和列表中的另一个)是否应该死亡。因此,在您的游戏循环中,您从一个敌人调用该方法以控制所有敌人。换句话说,您正在创建具有不同职责的相同对象。根据经验:一个对象的方法应该只改变它自己的状态。

最后,draw() 方法是不必要的,因为父类(super class)完全按照您的方式定义了该方法。所以删除你的将改为调用 pygame.sprite.Spritedraw()

关于python - Pygame 从组中删除单个 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40632424/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com