Python Pygames - ayuda con movimiento de sprites

Consulte acerca de programas, técnicas, algoritmos etc.

Python Pygames - ayuda con movimiento de sprites

Notapor eduard_zaraki » Sab Mar 14, 2009 2:22 pm

Hola gente, muchos saludos y mis mejores deseos a la comunidad de los videojuegos :D

Estoy aprendiendo (desde hace poco) a trabajar en Python y el desarrollo de juegos a traves de Pygame, hasta ahora solo se lo basico y deberia seguir practicando python antes de meterme a fondo con pygames pero no pude evitar hacerme unas preguntas sobre el movimiento de los sprites.

digamos q cargo una imagen de fondo: "mapa1.PNG" y digamos q cargo un sprite q seria mi personaje y como está de frente seria "personaje_frente.png". Cuando se presiona una tecla de movimiento, por ejemplo K_RIGHT el personaje debe cambiar de sprite a uno q este mirando a la derecha "personaje_derecha.png". y si sigo presionando esa tecla deberia moverse a la derecha PERO... como el personaje es humano y no un circulo o cualquier sprite q no necesite movimiento de pies, se deben alternar png`s a uno q levante el pie derecho, q esten a la misma posicion, q levante el pie izquierdo, q vuelvan a estar en la misma posicion y asi sucesivamente.

"personaje_derecha.png" -> "personaje_derecha_PieDerecho.png"-> "personaje_derecha.png" -> "personaje_derechaPieIzquierdo.png"

y el movimiento se ve mas humano pues uno ve como se mueven los pies.

Mis dudas son:

1. ¿de alternar esas imagenes, debo hacer un sleep() o delay() para q se pueda apreciar el movimiento?

2. ¿las funciones delay() o sleep() aceptan valores decimales? es decir, no quisiera poner sleep(1) porque 1 segundo entre cada transicion me parece excesivo, y seria mejor si fuese sleep(0.5) o un valor intermedio entre cero y uno.. (puse delay y sleep porque no recuerdo si las dos funciones estan en python o solo una de ellas [es q solia trabajar en C++ y alli estaban ambas])

----------------------------------------------------------------------------
tomando la pregunta 1, seria asi?:

def MoverX(self,aumentoX)
self.posX += aumentoX

y al invocar en el "main" ese metodo para un objeto seria:

personaje.MoverX(3)
sleep(0.4)
-------------------------------------------------------------------------------

que otras condiciones como estas deberia tomar en cuenta para el movimiento de los sprites. (todavia no me he puesto a ver las colisiones :? )

Nota: iba a poner los sprites q hice en paint para probar estos moviientos pero no supe como subir las imagenes al post directo desde la pc y no a traves de algun link a imageshack o alguna de esas :?

de antemano, gracias
"De mi cuerpo descompuesto creceran las flores y yo estare en ellas, eso es Eternidad"
eduard_zaraki
 
Mensajes: 5
Registrado: Sab Mar 14, 2009 1:07 pm
Ubicación: Zulia

Notapor Juanxo » Sab Mar 14, 2009 3:09 pm

Buenas:
Yo no es que sea un experto en python-pygame(hombre algo se xD) pero creo que si puedo aconsejarte que no te preocupes demasiado de detalles tan pequeños, y menos al principio, ya que te llevarán mucho tiempo y realmente te frustrarás si no lo consigues(cosa que por otro lado es probable).

Preocupate de momento por que se mueva de manera mas o menos natural en las cuatro direcciones, para lo cual te pueden venir bien los ejemplos en la web de Grilla y Automatas y animaciones

Por cierto, si no quieres perder tiempo haciendo tus propios sprites puedes recurrir a numerosas paginas de recursos gratuitos. Tienes varios ejemplos aquí y aquí

Espero que estos pequeños ejemplos te ayuden y te orienten

PD: si eres nuevo en esto de la programacion juegos, en la seccion referencia de la pagina principal hay varios articulos bastante buenos sobre como empezar.

En pygame existe delay, pero se le pasa como parametro un numero de milesimas, no de segundos
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Python Pygames - ayuda con movimiento de sprites

Notapor hugoruscitti » Sab Mar 14, 2009 3:40 pm

eduard_zaraki escribió:1. ¿de alternar esas imagenes, debo hacer un sleep() o
delay() para q se pueda apreciar el movimiento?


Es recomendable no usar delay o sleep dentro de la animaciones, porque si
bien resuelven el tema de la velocidad, sleep o delay harán que todo el
juego funcione mucho mas lento. Cuando usas estas funciones le indicas al
programa que se detenga por completo una determinada cantidad de milisegundos.

Entonces, imagina que tienes 5 personajes, si todos llaman a la función
"sleep" o "delay", entonces el juego parecerá muy lento.

Una solución es tener dos variables para administrar la velocidad de
animación, por ejemplo una variable contador y otra con la velocidad de la
animación:

Código: Seleccionar todo
def actualizar_animacion(self):
    self.contador_de_cuadros += 1

    if self.contador_de_cuadros > velocidad_de_animacion:
        self.contador_de_cuadros = 0
        self.cargar_al_siguiente_cuadro()


La variable "velocidad_de_animacion" tiene que se un número indicando la
lentitud de la animación, si esta vale 50, se necesitará ejecutar 51 veces
este código para avanzar la animación.

Lo bueno de esta forma es que no tendrás que detener la velocidad completa
del juego, y las animaciones podrán correr de manera independiente dentro
de la escena.



eduard_zaraki escribió:2. ¿las funciones delay() o sleep() aceptan valores decimales? es decir, no quisiera poner sleep(1) porque 1 segundo entre cada transicion me parece excesivo, y seria mejor si fuese sleep(0.5) o un valor intermedio entre cero y uno.. (puse delay y sleep porque no recuerdo si las dos funciones estan en python o solo una de ellas [es q solia trabajar en C++ y alli estaban ambas])



Si, las funciones están en el módulo "time" de pygame. Observa que el
argumento que reciben está medido en milisegundos, por lo que un segundo
se especifica con el número 1000.

En losersjuegos hemos realizado una traducción de toda la documentación:

http://www.losersjuegos.com.ar/traducciones/pygame


eduard_zaraki escribió:Nota: iba a poner los sprites q hice en paint para probar estos moviientos pero no supe como subir las imagenes al post directo desde la pc y no a traves de algun link a imageshack o alguna de esas :?


si, tienes que utilizar algún servicio que almacene la imagen y te permita
acceder a ella a través de un link.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor eduard_zaraki » Mar Mar 17, 2009 7:28 pm

Muchisimas gracias por sus respuestas...

Juanxo... Por un par de semanas estare un poco ocupado pues estoy terminando este semestre en la uni, pero tenlo por seguro q checare los sprites. le eché una ojeada a las guias de "graficos y animaciones" y "automatas y animaciones" y se ven bastante bien... el semestre pasado vi teoria de automatas y fuera del analisis de gramaticas jamas pense en este uso para las transiciones de estados :D y a pesar de q guardare el pdf, este será pa un poco mas tarde y mientras tanto empezare suave como dices, para no frustrarme :wink:

hugoruscitti... con respecto al juego en si, se supone q todo esta dentro de un bucle infinito ["while true:"] y ese actualizar_animacion() se llama una vez por personaje dentro de ese bucle?

ah y vi q estaba la documentacion traducida pero no pude bajarla :? no se si sera un problema con mi conexion :? pero me bajare cuando pueda la version en ingles pues no tengo gran problema con el ingles.

De nuevo, muchas gracias.
"De mi cuerpo descompuesto creceran las flores y yo estare en ellas, eso es Eternidad"
eduard_zaraki
 
Mensajes: 5
Registrado: Sab Mar 14, 2009 1:07 pm
Ubicación: Zulia


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron