Как создать шагающего персонажа, используя несколько изображений из листа спрайта - PullRequest
2 голосов
/ 28 декабря 2011

Я хочу создать «иллюзию», так сказать, что мой персонаж ходит, используя несколько изображений из листа с несколькими позициями спрайтов.Я только знаю, как переместить одно изображение с помощью 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()

Ответы [ 2 ]

1 голос
/ 02 января 2012

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

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

0 голосов
/ 18 апреля 2012

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

Сначала я загружаю все фреймы спрайтов в список под названием 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...