敌人在被杀后继续射击


class NPC(pg.sprite.Sprite): 
def __init__(self,x,y,image):
self.copyimg = pg.image.load(image).convert_alpha()
pg.sprite.Sprite.__init__(self)
self.image = self.copyimg.copy()
#self.copyimg.fill(RED)
self.rect = self.image.get_rect()
self.radius = int(self.rect.width / 3)
#pg.draw.circle(self.copyimg,RED,self.rect.center,self.radius)
self.rect.center = (x,y)
self.pos = vec(x,y)
self.vel = vec(0,0)
self.acc = vec(0,0)
self.speed =  0.3
self.friction = -0.02
self.rot = 0
self.chasex = True
self.chasey = True
self.directing = 1
self.times = pg.time.get_ticks()
self.mainmenu = True
def rotate(self):
self.rot = self.rot % 360
newimage = pg.transform.rotate(self.copyimg,int(self.rot%360))

#pg.draw.rect(screen,WHITE,self.rect,5)
#old_center = self.rect.center
self.image = newimage
self.rect = self.image.get_rect()
#self.rect.center = old_center   
def shoot(self):
bullet = BulletPlayer(self.pos.x,self.pos.y,self.rot,lasers['laserblue'][random.randint(0,len(lasers['laserblue'])-1)])
bulletgroupenemy.add(bullet)
pass
class Bullet(pg.sprite.Sprite):
def __init__(self,x,y,rotation,image):
pg.sprite.Sprite.__init__(self)
self.cop = pg.image.load(image).convert_alpha()
self.image = self.cop.copy()
self.rect = self.image.get_rect()
self.rect.bottom = y
self.rect.centerx = x
self.shootspeed = 10
self.rotation = rotation
def update(self):
self.rotation = self.rotation % 360
newimage = pg.transform.rotate(self.cop,int(self.rotation))
oldcenter = self.rect.center
self.image = newimage
self.rect = self.image.get_rect()   
self.rect.center = oldcenter

keys = pg.key.get_pressed()

if self.rect.x < 0 or self.rect.x >WIDTH or self.rect.y > HEIGHT or self.rect.y < 0:
self.kill()

我有一个NPC类和子弹类,当然还有一个我们可以控制的主角。你可以看到在NPC类中有一个射击方法。这是自动调用当我用子弹射击NPC时,调用spritecollide函数

hitsenemy = pg.sprite.spritecollide(playerlist[i],bulletgroup,True)
if hitsenemy:
playerlist[i].kill()       

NPC得到杀戮是正确的,但不知何故它一直在射击。拍摄功能仍然可以正常工作!我刚刚用了这个hitsenemy。我还用这个for循环来添加分组。我不想让它一直拍下去

playerlist = [Player(300,200,'playerShip2_blue.png')]
for players in playerlist:
allsprites.add(players)
playergroup.add(players)

我也有这个allsprites组allsprites = pg.sprite.Group()

这个方法属于玩家类,我没有分享,因为这是我如何拍摄与玩家类。

def shoot(self):
bullet = BulletPlayer(self.rect.centerx,self.rect.centery,self.rot,lasers['lasergreen'])
bulletgroup.add(bullet)
allsprites.add(bullet)

playerlist是列表,而不是pygame.sprite.Grouppygame.sprite.Sprite.kill

将精灵从所有群组中移除

因此,当您调用kill时,精灵从所有组中删除,但它仍在playerlist中。

必须从列表中删除精灵。参见如何在迭代时从列表中删除项?

hitsenemy = pg.sprite.spritecollide(playerlist[i],bulletgroup,True)
if hitsenemy:
playerlist[i].kill()
playerlist.pop(i)

或者,考虑使用组而不是列表。注意Group中的精灵可以迭代。中的Sprites列表可以通过pygame.sprite.Group.sprites()获取。

最新更新