Я пытаюсь сделать игру в pygame для проекта com sci. Макет очень похож на Galaga или любую другую аркадную игру типа шутер сверху вниз. Проблема, с которой я столкнулся сейчас, заключается в том, что после уничтожения спрайта спрайт все еще перемещается. Я хочу, чтобы спрайты не двигались, чтобы можно было рассчитать время падения пули.
Другими словами, я основываю атаки противника с их позиций х, и как только спрайт мертв, они продолжают двигаться, поэтому Враг атакует в любом случае. Есть ли способ остановить движение спрайта после его смерти или обнаружить мертвый, чтобы я мог остановить его сам? Спасибо!
Извините, если пропустил необходимый код, я не хотел добавлять слишком много наполнителя.
#Enemy class #1
class Kevin(pygame.sprite.Sprite):
# Constructor. Pass in the color of the block,
# and its x and y position
def __init__(self, width, height):
# Call the parent class (Sprite) constructor
pygame.sprite.Sprite.__init__(self) #Python 2.7 version
self.image = (pygame.image.load(r"IMAGE"))
self.rect = self.image.get_rect()
def change(self,speedx,speedy):
self.rect.x += speedx
self.rect.y += speedy
#Enemy attack
class Bullet(pygame.sprite.Sprite):
# Constructor. Pass in the color of the block,
# and its x and y position
def __init__(self, width, height):
# Call the parent class (Sprite) constructor
pygame.sprite.Sprite.__init__(self) #Python 2.7 version
self.image = (pygame.image.load(r"IMAGE"))
self.rect = self.image.get_rect()
def change(self,speedx,speedy):
self.rect.x += speedx
self.rect.y += speedy
...
def minions(enemyx,enemyy,changex,a,b):
global list1
for i in range(a,b):
enemyx += changex
list1.append(i)
list1[i] = Kevin(100,100)
list1[i].rect.x = enemyx
list1[i].rect.y = enemyy
list2.append(i)
list2[i] = Kevin(100,100)
list2[i].rect.x = enemyx
list2[i].rect.y = enemyy
enemy_list.add(list1[i])
all_sprite_list.add(list1[i])
...
def lazerdrop(x,y,a,b):
for i in range(a,b):
list3.append(i)
list3[i] = Bullet(100,100)
list3[i].rect.x = x
list3[i].rect.y = y
lazer_list.add(list3[i])
all_sprite_list.add(list3[i])
for d in range(7):
lazerdrop(-400,105,0,d)
minions(-500,100,80,0,5)
...
all_sprite_list.update()
screen.fill(BLACK)
all_sprite_list.draw(screen)
...
#If enemy is hit by lazer
blocks_hit_list = pygame.sprite.groupcollide(enemy_list,block_list,True,True)
if len(blocks_hit_list) == 1:
score += 200
...
#If the enemy reaches a certan x point, drop a lazer
if list1[10].rect.x > 168 and list1[10].rect.x < 175:
list3[1].rect.x = list1[10].rect.x
list3[1].rect.y = list1[10].rect.y
list3[2].rect.x = list1[11].rect.x
list3[2].rect.y = list1[11].rect.y