Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/03/2012, 16:58
Avatar de eMaa
eMaa
 
Fecha de Ingreso: octubre-2008
Mensajes: 223
Antigüedad: 15 años, 6 meses
Puntos: 1
Problema pygame

Tengo la siguiente clase "Principal" que define la ventana principal del juego. El problema es que al querer mover mi "Personaje" la imagen que lo representa no cambia su posicion. Estoy seguro que el problema es el repintado de la ventana pero no se donde

a continuacion la clase "Principal"

Código:
import pygame
import Personaje

class Principal:


    def __init__(self):
        pygame.display.init()
        pygame.display.set_icon(pygame.image.load("favicon.png"))
        self.personaje = Personaje.Personaje("wowo","Mago","Elfo",50,50)
        self.tamaño = (1000,650)
        self.ventanaPrincipal = pygame.display.set_mode(self.tamaño,pygame.RESIZABLE)

    def draw(self):
        '''
        Descripcion: Crea la ventana,Setea el titulo de la ventana,Agrega al personaje
        Retorna: nada
        Argumentos: no tiene
        '''
        self.ventanaPrincipal.fill((255,255,255))
        pygame.display.set_caption("Fatum Online")
        self.ventanaPrincipal.blit(self.personaje.draw(),(self.personaje.getPosicionX(),self.personaje.getPosicionX()))
        pygame.display.flip()

    def capturarEventos(self):
        '''
        Descripcion: Crea un bucle que se encarga de tomar los eventos y toma desiciones en torno a ellos
        Retorna: nada
        Argumentos: no tiene
        '''
        pygame.display.update()
        #Un bucle para mantener la ventana y tomar los eventos
        while True:
            #Aqui checamos todos los eventos que ocurrieron
            for e in pygame.event.get():
                pygame.display.update()
                #Si el tipo del evento es QUIT (o salir) entonces termina el ciclo
                if e.type == pygame.QUIT:
                    pygame.display.quit()
                    break
                #Si existen tomo los eventos del teclado
                if e.type == pygame.KEYDOWN:
                    #Cuando se pulse en las felchas de teclado seteamos la posicion del personaje y su visualizacion en pantalla
                    if e.key == pygame.K_DOWN:
                        self.personaje.moverArriba()
                        pygame.display.update()
                        break
                    if e.key == pygame.K_UP:
                        self.personaje.moverAbajo()
                        pygame.display.update()
                        break
                    if e.key == pygame.K_RIGHT:
                        self.personaje.moverDerecha()
                        pygame.display.update()
                        break
                    if e.key == pygame.K_LEFT:
                        self.personaje.moverIzquierda()
                        pygame.display.update()
                        break
                    if e.key == pygame.K_ESCAPE:
                        pygame.display.quit()
            

#Inicia el objeto principal
principal = Principal()
principal.draw()
principal.capturarEventos()

y la clase "Personaje"

Código:
import pygame

class Personaje:

    def __init__(self,nombre,clase,raza,posicionX,posicionY):
        self.nombre = nombre
        self.clase = clase
        self.raza = raza
        self.posicionX = posicionX
        self.posicionY = posicionY
        self.cuerpo = pygame.image.load("personaje.png")

    def draw(self):
        '''
        Devuelve el cuerpo del personaje
        '''
        return self.cuerpo

    def getPosicionX(self):
        '''
        Retorna la posicion en X
        '''
        return self.posicionX

    def getPosicionY(self):
        '''
        Retorna la posicion en Y
        '''
        return self.posicionY

    def moverArriba(self):
        '''
        Aumenta la posicion en X
        '''
        self.posicionX += 10

    def moverAbajo(self):
        '''
        Disminuye la posicion en X
        '''
        self.posicionX -= 10

    def moverDerecha(self):
        '''
        Aumenta la posicion en Y
        '''
        self.posicionY += 10

    def moverIzquierda(self):
        '''
        Disminuye la posicion en Y
        '''
        self.posicionY -= 10