Код, кажется, содержит все правильные компоненты, за исключением того, что он немного перепутан.
Обычно, когда вы создаете спрайт, он имеет функцию __init__()
- очевидно, для инициализации, и дополнительно update()
функция. Функция update()
обычно не рисует объект на дисплее / поверхности, но регулирует положение (то есть: sprite.rect) или изменяет «внешний вид» (изображение), используемый для спрайта, для рисования позже .
Спрайты обычно группируются в метко названную Sprite Group . Когда спрайты находятся в группе, один вызов group .update () вызовет функцию update()
для каждого содержащегося спрайта. Это действительно удобно и хорошо работает.
Итак, настройка вашего Vampire Pizza Sprite:
class VampireSprite(sprite.Sprite):
def __init__(self):
super().__init__()
self.speed = 2
self.lane = randint(0, 4)
self.image = VAMPIRE_PIZZA.copy()
y = 50 + self.lane * 100
self.rect = self.image.get_rect(center = (1100, y))
def update(self):
# TODO - do Vampire Pizzas Move?
# if so, update the self.rect
pass
И это все, что нужно. Я удалил код рисования, он будет обработан группой спрайтов.
Итак, позже:
# Make a group of vampire sprites
all_vampires = sprite.Group()
all_vampires.add( VampireSprite() ) # Start with a single vampire
# Game Loop
game_running = True
while game_running:
# handle events
for event in pygame.event.get():
#Exit loop on quit
if event.type == QUIT:
game_running = False
# spawn some vampires, maybe
if randint(1, SPAWN_RATE) == 1:
all_vampires.add( VampireSprite() ) # add to the group
# Update/move all vampire sprites
all_vampires.update() # updates every sprite in group
# repaint the screen
GAME_WINDOW.blit(BACKGROUND, (0,0))
# draw some columns(?)
tile_color = WHITE
for row in range(6):
for column in range(11):
draw.rect(GAME_WINDOW, tile_color, (WIDTH * column, HEIGHT * row, WIDTH, HEIGHT), 1)
all_vampires.draw() # paints every sprite in group
display.update()
pygame.quit()
Есть два вызова из группы all_vampires
спрайтов - all_vampires.update()
и all_vampires.draw()
? Только с этими двумя вызовами все спрайты в группе перемещаются (настраиваются / что угодно) и отображаются на экране.