Pygame 2, moviendo imágenes.

Hola a tod@s, hoy voy a enseñaros como mover objetos en pygame, por que, ¿De que serviría crear un objeto si no lo podemos mover?, de nada, así que es lo que vais a aprender en esta ocasión.


Esta vez aparte del fondo que os dí en el anterior tutorial, vamos a usar una imagen mas, un pingüino, aquí tenéis el enlace para que lo descarguéis:


La imagen no es mía, es de otro blog, pero como es para hacer pequeñas pruebas la podemos usar.

Bueno, creo que en el anterior tutorial teníamos este código:

#---------importamos los módulos----------------
import pygame, sys
from pygame.locals import *


 
 #--------definimos las contantes--------------------

altura=640
anchura=480

#-----definimos aquí todas las clases y funciones a utilizar----------

#---función principal del juego

def main():
    
          pygame.init()
          ventana=pygame.display.set_mode((altura, anchura))
          pygame.display.set_caption("Probando pygame....")
          
          #cargamos la imagen
          fondo=pygame.image.load("imagen.jpg").convert()
          #indicamos la posición donde queremos dibujarla
          ventana.blit(fondo, (0, 0))
           #actualizamos la ventana
           pygame.display.flip()
           
          

         #aquí el "loop" del juego, es decir, el bucle principal
          while True:
                  #posibles entradas del teclado
                  for eventos in pygame.event.get():
                          if eventos.type==pygame.QUIT:
                                  sys.exit()
                
                 

if __name__== "__main__":
         main()

Pues lo primero que vamos a hacer, es añadir la imagen nueva exactamente igual que como lo hacíamos con la imagen de fondo, el código se quedaría así:

#---------importamos los módulos----------------
import pygame, sys
from pygame.locals import *


 
 #--------definimos las contantes--------------------

altura=640
anchura=480

#-----definimos aquí todas las clases y funciones a utilizar----------

#---función principal del juego

def main():
    
          pygame.init()
          ventana=pygame.display.set_mode((altura, anchura))
          pygame.display.set_caption("Probando pygame....")
          
          #cargamos la imagen
          fondo=pygame.image.load("imagen.jpg").convert()

          tux=pygame.image.load("tux.png").convert_alpha() 
          #indicamos la posición donde queremos dibujarla
          ventana.blit(fondo, (0, 0))

           ventana.blit(tux, (550, 200))
 
           #actualizamos la ventana
           pygame.display.flip()
           
          

         #aquí el "loop" del juego, es decir, el bucle principal
          while True:
                  #posibles entradas del teclado
                  for eventos in pygame.event.get():
                          if eventos.type==pygame.QUIT:
                                  sys.exit()
                
                 

if __name__== "__main__":
         main()

Y ya esta, tan sólo cargamos la imagen como lo hacíamos antes y la colocamos en pantalla, pero esta vez en la posición "550, 220", vosotr@s podéis ponerla donde queráis.

Anotación: cuando cargamos la imagen, en vez de usar "convert" usamos "convert_alpha", eso es simplemente por que la imagen es  "png" y tiene transparencia, si se usara "convert" no respetaría la transparencia.

Ahora que ya tenemos el pingüino en la pantalla, vamos a moverlo, para ello solo tenemos que ir jugando con las coordenadas de donde queremos que este en pantalla:


#---------importamos los módulos----------------
import pygame, sys
from pygame.locals import *


 
 #--------definimos las contantes--------------------

altura=640
anchura=480

#-----definimos aquí todas las clases y funciones a utilizar----------

#---función principal del juego

def main():

          #variables locales
          x=550
          y=220
    
          pygame.init()
          ventana=pygame.display.set_mode((altura, anchura))
          pygame.display.set_caption("Probando pygame....")
          
          #cargamos la imagen
          fondo=pygame.image.load("imagen.jpg").convert()

          tux=pygame.image.load("tux.png").convert_alpha() 
 
          #indicamos la posición donde queremos dibujarla
          ventana.blit(fondo, (0, 0))

         

 
           #actualizamos la ventana
           pygame.display.flip()
           
          

         #aquí el "loop" del juego, es decir, el bucle principal
          while True:
                  x+=1 
                  y+=1
                  ventana.blit(tux, (x, y))
                  pygame.display.flip()
                  #posibles entradas del teclado
                  for eventos in pygame.event.get():
                          if eventos.type==pygame.QUIT:
                                  sys.exit()
                
                 

if __name__== "__main__":
         main()

Bien, como veis lo único que he hecho es jugar con los argumentos del método "blit", pero pasa una cosa, si nosotros probamos este código, quedaría algo así:


Eso es por que no hemos dicho que borre, es decir, hemos dicho que el pingüino se vaya dibujando, pero no que vaya borrando lo anterior, para eso se debe de redibujar todo, tanto el fondo como el pingüino:

#---------importamos los módulos----------------
import pygame, sys
from pygame.locals import *


 
 #--------definimos las contantes--------------------

altura=640
anchura=480

#-----definimos aquí todas las clases y funciones a utilizar----------

#---función principal del juego

def main():
    
          pygame.init()
          x=220
          y=220
          ventana=pygame.display.set_mode((altura, anchura))
          pygame.display.set_caption("Probando pygame....")
          
          #cargamos la imagen
          fondo=pygame.image.load("imagen.jpg").convert()

          tux=pygame.image.load("tux.png").convert_alpha() 
 
          #indicamos la posición donde queremos dibujarla
          ventana.blit(fondo, (0, 0))

         

 
           #actualizamos la ventana
           pygame.display.flip()
           
          

         #aquí el "loop" del juego, es decir, el bucle principal
          while True: 
                  #movemos el personaje
                  x+=1 
                  y+=1
                  #redibujamos todo
                  ventana.blit(fondo(0, 0)) 
                  ventana.blit(tux, (x, y))

                  #mostramos los cambios
                  pygame.display.flip()

                  #posibles entradas del teclado
                  for eventos in pygame.event.get():
                          if eventos.type==pygame.QUIT:
                                  sys.exit()
                
                 

if __name__== "__main__":
         main()

Y ya esta, como veis es sencillo, bueno, espero que os haya gustado el tutorial de hoy, un abrazo a tod@s y hasta el próximo tutorial.

10 comentarios:

Dr Coloso dijo...

Hola Francisco, muy bueno el ejemplo, pero tuve algunos inconvenientes que te paso a detallar.

Las constantes X e Y tendrian que ser creadas en la funcion main para poder incrementarlas,

def main():
...x = 220
...y = 220

Despues para repintar la imagen del pinguino.
Tendria que ser al reves, primero pinta el fondo y luego el personaje.

ventana.blit(fondo, (0, 0))
ventana.blit(tux, (x, y))

Sino estaria simpre pintado el fondo sobre el personaje y no se veria ni el personaje ni el movimiento.

Saludos.

Francisco Dominguez Lerma dijo...

Gracias Dr Coloso, y perdón por los errores, ahora mismo los corrigo.

Un saludo.

Dan dijo...

Perdona me podrias dar el codigo completo sin
nada mas es que no lo entiendo muy bien.

Francisco Dominguez Lerma dijo...

Si claro Dan, el código es la última parte negrita que hay al final del post, no lo pego aquí por que en los comentarios no se ve bien, pero vamos, al final del post, hay un gran código en negrita justo antes de despedirme, ese es el código completo.

Que no se te olvide colocar las imágenes junto al archivo ".py" y que el archivo ".py" no lo llames "pygame" por que si no dará un error.

Un saludo.

Dr Coloso dijo...

Si tenes alguna duda pregunta, asi vas a aprender mejor.
PD : Que paso que no salieron mas lecciones?

Francisco Dominguez Lerma dijo...

ya... Dr Coloso... es que estoy también trabajando y la verdad no tengo mucho tiempo... voy a ver si mañana puedo escribir en un rato un articulo, perdonadme todos de verdad.

Un saludo.

Dr Coloso dijo...

Por favor no pidas disculpas, este blog lo mantenes en tu tiempo libre y es mas que entendible. Suerte con el trabajo.

Francisco Dominguez Lerma dijo...

Gracias por tu comprensión dr coloso, intentaré dedicarle a esto mas tiempo.

Saludos.

Anónimo dijo...

hola! soy mica, si quiero hacer una especie de snake, como hago que se mueva todo el cuerpo y no solo la cabeza, si importé las partes de la serpiente por separado,para que cuando vaya comiéndose la comida, crezca su longitud?
Gracias de antemano:)

Francisco Dominguez Lerma dijo...

Mica siento decirte que no tengo tanto nivel de pygame como para hacer eso, busca tutoriales de pygame en google y suerte.

Un saludo.