Este ejemplo a diferencia de los anteriores usa sprites animados, dando la sensación de que el personaje camina; cabe aclarar que es un ejemplo muy sencillo ya que el usuario no interactúa es una simple animación, sin embargo es muy fácil hacer que el personaje se mueva con el teclado si se implementa las instrucciones del teclado del ejemplo anterior.
Se divide en dos archivos: sujetos.py y juego.py
sujetos.py
import pygame class sujeto(pygame.sprite.Sprite): """De esta clase heredan los objetos vivientes""" def __init__(self, imagenes): self.imagenes = imagenes self.frame = 0 self.indicador = 30 self.rect = self.imagenes[self.frame].get_rect() self.rect.top = 300 self.rect.left = 40 def move(self, vx,vy): self.rect.move_ip(vx,vy) def update(self, superficie): superficie.blit(self.imagenes[self.frame],self.rect) def nextFrame(self): self.frame = self.indicador % len(self.imagenes) #controla los indices de las imagenes self.indicador+=1 #sigue a la imagen siguiente def setNewSprites(self,imagenes): self.imagenes = imagenes class Player(sujeto): """Clase del heroe""" def __init__(self, imagenes): sujeto.__init__(self,imagenes) def getLife(): return self.life
juego.py
import pygame import sujetos import os # Constantes ANCHO = 640 ALTO = 480 # Inicializaciones y variables globales pygame.init() screen = pygame.display.set_mode((ANCHO,ALTO)) pygame.display.set_caption("SponjeBob Attack") reloj = pygame.time.Clock() # Carga las imagenes def load_img(nombre, directorio): ruta = os.path.join(directorio,nombre) try: image = pygame.image.load(ruta) except: print "Error! no se puede cargar la imagen" return image.convert_alpha() imagenesPlayerDer = [load_img("walkr1.png","Res"),load_img("walkr2.png","Res"), load_img("walkr3.png","Res"),load_img("walkr4.png","Res"), load_img("walkr5.png","Res"),load_img("walkr6.png","Res"),] imagenesPlayerIzq = [load_img("walkl1.png","Res"),load_img("walkl2.png","Res"), load_img("walkl3.png","Res"),load_img("walkl4.png","Res"), load_img("walkl5.png","Res"),load_img("walkl6.png","Res"),] imagenFondo = load_img("fondo.png","Res") # Pinta las imagenes en la pantalla def paint(player): screen.blit(imagenFondo,[0,0]) player.update(screen) pygame.display.update() player.nextFrame() def main(): spritesRight = True player = sujetos.Player(imagenesPlayerDer) exit = False vx = 15 while exit != True: # Bucle principal paint(player) player.move(vx,0) for event in pygame.event.get(): if event.type == pygame.QUIT: exit = True # control de los limites if player.rect.left >= ANCHO or player.rect.left <= 0: vx=-vx if spritesRight == True: #si mira hacia la derecha player.setNewSprites(imagenesPlayerIzq) spritesRight = False else: #si mira hacia la izquierda player.setNewSprites(imagenesPlayerDer) spritesRight = True reloj.tick(12) pygame.quit() # INICIO if __name__ == '__main__': main()
Pueden descargar el código completo con las imagenes aquí o aquí. Esos son módulos base para el juego que publicare próximamente, hasta entonces.
y como le hago para hacer lo mismo pero ponerlo de fondo ? es q quiero hacer un "gif(varias de mis imagenes)" de fondo
ResponderEliminar