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í:
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()
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:
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:
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
#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()
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()
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í:
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
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()
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()
#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:
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.
Gracias Dr Coloso, y perdón por los errores, ahora mismo los corrigo.
Un saludo.
Perdona me podrias dar el codigo completo sin
nada mas es que no lo entiendo muy bien.
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.
Si tenes alguna duda pregunta, asi vas a aprender mejor.
PD : Que paso que no salieron mas lecciones?
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.
Por favor no pidas disculpas, este blog lo mantenes en tu tiempo libre y es mas que entendible. Suerte con el trabajo.
Gracias por tu comprensión dr coloso, intentaré dedicarle a esto mas tiempo.
Saludos.
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:)
Mica siento decirte que no tengo tanto nivel de pygame como para hacer eso, busca tutoriales de pygame en google y suerte.
Un saludo.
Publicar un comentario