2011-12-28 4 views
2

Я хочу создать «иллюзию», так сказать, что мой персонаж идет, используя несколько изображений с листа нескольких позиций спрайтов. Я знаю, как перемещать одиночное изображение с помощью WASD. Вот мой код до сих пор:Как создать персонаж для ходьбы с помощью нескольких изображений из листа спрайтов

room_bg = 'woodf.jpg'#wood floor background 
screen = pygame.display.set_mode((640,360),0,32) 

background = pygame.image.load(room_bg).convert()#background here 
x,y = 290,150 
movex, movey = 0,0 
while 1:#blitting background to middle of screen, start of main game loop 
    screen.blit(background, (170,100)) 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
     pygame.quit() 
     sys.exit() 

    if event.type == KEYDOWN: 
     if event.key == K_a: 
      movex = -1 
      pygame.image.load('s_left1.png') 
      pygame.Surface.blit(mc_left1) 
     elif event.key == K_d: 
      movex = +1 
     elif event.key == K_w: 
      movey = -1 
     elif event.key == K_s: 
      movey = +1 
    if event.type == KEYUP: 
     if event.key == K_a: 
      movex = 0 
     elif event.key == K_d: 
      movex = 0 
     elif event.key == K_w: 
      movey = 0 
     elif event.key == K_s: 
      movey = 0 

x+= movex 
y+= movey 

mc = pygame.image.load('ss.png').convert() 
mc.set_colorkey((0,0,0)) 
screen.blit(mc,(x,y)) 
pygame.display.update() 

ответ

1

Сначала нужно извлечь отдельные спрайты из спрайта листа, то вы хотите использовать, например, итератор для обслуживания их метода рисования в каждом вызове.

Here you have a tutorial о том, как получить отдельные изображения со спрайта и как их использовать для анимации.

0

Я сомневаюсь, что это самый эффективный способ анимации спрайта, но он работает для меня до сих пор.

Сначала я загружаю все кадры спрайтов в список под названием spritesheet. Затем каждый раз, когда происходит событие перемещения, я повторяю каждый кадр, обновляя отображение между каждой итерацией. Я также представил небольшую задержку, чтобы сделать ее более жидкой. Опять же, возможно, это не лучший способ сделать это, но это способ.

for spriteframe in spritesheet: 
     x_add = x/len(spritesheet) 
     y_add = y/len(spritesheet) 
     player.setPosition(player.getX() + x_add, player.getY() + y_add) 
     updateBackground(current_map) 
     pygame.time.delay(40) 
     updateCharacter(player,spriteframe, image) 
     pygame.display.update() 
+0

Я использую это тоже, но использовать 'Часы = pygame.time.Clock()' ', а затем Clock.tick (25)' вместо 'pygame.time.delay (40)' – fdvfcges

 Смежные вопросы

  • Нет связанных вопросов^_^