viernes, 9 de diciembre de 2011

Mover un Sprite en Python con Pygame

En esta ocasión vamos a modificar nuestro ejemplo anterior para mejorar el movimiento con el teclado, y mover la imagen como un sprite y no como una simple imagen, mas adelante mencionare las ventajas de esto.

import pygame

negro = (0,0,0)
blanco = (255,255,255) 
arriba,abajo,izq,der = False, False, False, False
exit = False 
speed = 10
vx,vy = 0,0  

class Balon(pygame.sprite.Sprite):
    def __init__(self,imagen):
        self.imagen = imagen
        self.rect=self.imagen.get_rect()
        self.rect.top = 300
        self.rect.left = 320
    def move(self,vx,vy):
        self.rect.move_ip(vx,vy)
    def update(self,superficie):
        superficie.blit(self.imagen,self.rect)

def check_keys(event):
    global vx
    global vy
    global abajo
    global arriba
    global izq
    global der
    global exit
    if event.type == pygame.QUIT:
        exit = True                
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_UP:
            arriba = True
            vy-= speed
        if event.key == pygame.K_DOWN:
            abajo = True
            vy+= speed
        if event.key == pygame.K_RIGHT:
            der = True
            vx+= speed
        if event.key == pygame.K_LEFT:
            izq = True
            vx-= speed
    if event.type == pygame.KEYUP:
        if event.key == pygame.K_UP:
            arriba = False
            if abajo == True: vy+=speed
            else: vy=0
        if event.key == pygame.K_DOWN:
            abajo = False
            if arriba == True: vy-=speed
            else: vy=0
        if event.key == pygame.K_RIGHT:
            der = False
            if izq == True: vx-=speed
            else: vx=0
        if event.key == pygame.K_LEFT:
            izq = False
            if der == True: vx+=speed
            else: vx=0
def main():    
    pygame.init()
    screen = pygame.display.set_mode((640,480))    
    reloj = pygame.time.Clock()
    pygame.display.set_caption("Ejemplo")
    imgBalon = pygame.image.load("balon.png").convert_alpha()
    fondo = pygame.image.load("fondo.png").convert_alpha()
    balon = Balon(imgBalon)    
    
    while exit!= True:
        for event in pygame.event.get():
             check_keys(event)                      
        screen.blit(fondo,(0,0))
        balon.move(vx,vy)
        balon.update(screen)
        pygame.display.update() 
        reloj.tick(20)       
    pygame.quit()
    
main()


El código se ordeno en varias funciones, se le coloco un titulo a la ventana, se creo una clase especifica para crear el sprite y se agrego una imagen de fondo, en lugar de color sólido. La ventaja de manejar sprites, es que tenemos el rectángulo de la imagen lo que facilita mas adelante la detección de colisiones, y ademas, el movimiento se hace mas sencillo moviendo el rectángulo con move_ip().

Fuentes: ChelinTutorials, Pygame Doc

No hay comentarios:

Publicar un comentario