2015-03-13 5 views
0

Я недавно пытался создать анимацию, в которой мой спрайт перемещается вперед и назад между двумя картинками постоянно, без паузы. Мне было интересно, как это сделать. Любая помощь будет оценена, до сих пор, что у меня есть:Постоянная анимация на Pygame Sprites

import pygame 
import os 
import time 
import sys 

image1 = pygame.image.load("image1.png") 
image2 = pygame.image.load("image2.png") 

class sprite(object): 
    def __init__(self): 
     super(sprite, self).__init__() 
     self.x = 0 
     self.y = 0 

    def handle_keys(self): 

     key = pygame.key.get_pressed() 
     distance = 1 
     if key[pygame.K_DOWN]: 
      self.y += distance 

     if key[pygame.K_UP]: 
      self.y -= distance 

     if key[pygame.K_RIGHT]: 
      self.x += distance 
     if key[pygame.K_LEFT]: 
      self.x -= distance 


    def draw(self, surface): 

     surface.blit(self.image, (self.x, self.y)) 


pygame.init() 
screen = pygame.display.set_mode((1600, 800)) 

sprite=sprite() 
clock = pygame.time.Clock() 

running = True 
while running: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      running = False 

    sprite.handle_keys() 

    screen.fill((255,255,255)) 
    sprite.draw(screen) 
    pygame.display.update() 

    clock.tick(40) 

ответ

0

Посмотрите pyganim модуль для pygame. В вашем сценарии, импорт pyganim, создать PygAnimation из 2 PNG файлов, и блитирование его на поверхность:

import pyganim 
anim = pyganim.PygAnimation([("image1.png", 0.1), ("image2.png", 0.1)]) 
anim.play() 
... 
def draw(self, surface): 
    anim.blit(surface, (self.x, self.y)) 
+0

Спасибо, что это был самый простой способ, также спасибо за то, что вы познакомили меня с этим новым инструментом. Это облегчит мне жизнь. – Camil

0

В моих игровых ресурсах, я сделал класс Animate(), который хранит время, текущий индекс, и список изображений , Я не обновлял какое-то время, но вот как работает его метод anim().

def anim(self, dest, pos, rate, loop=True): 
    self.time += 1 
    if self.time%rate == 0: 
     self.index += 1 

    if self.index > len(self.imgs)-1: 
     if loop: 
      self.index = 0 
     else: 
      self.index = len(self.imgs)-1 

    dest.blit(self.imgs[self.index], pos) 

Вот как я его использую.

img1 = pygame.image.load('img1.png') 
img2 = pygame.image.load('img2.png') 
animate = Animate([img1, img2]) 

while True: 
    animate.anim(screen, sprite.pos, 10) 
    .... 

BTW rate не посекундно поэтому она может варьироваться в зависимости от машины к машине, поэтому я исправить мой фреймрейт, чтобы она не слишком быстро.

+0

У меня возникли проблемы с созданием класса Animate, позволяющим этой строке работать: animate = Animate ([img1, img2]) Не могли бы вы привести пример? – Camil

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