Personaje animado

Encuentra personas para llevar adelante tu proyecto, muestra el progreso de esos proyectos y participa en competencias grupales.

Moderador: Dokan

Personaje animado

Notapor Juanxo » Mié Feb 11, 2009 1:24 pm

Hola a todos!! Estoy aprendiendo a usar tiles y para ello estoy tratando de hacer un soldado con espada animado,pudiendo moverse en 8 direcciones(norte,sur,este,oeste y diagonales).El problema es que cuando hago las diagonales, primero me hace un movimiento hacia el lado y luego hace la diagonal.

Código: Seleccionar todo
        key=pygame.key.get_pressed()
        for e in pygame.event.get():
            if e.type==QUIT:
                sys.exit()
            elif key[K_RETURN]:
                contador=-1
                Ataques(screen,contador,orientacion,pos_image,pos_x,pos_y)
            elif key[K_RIGHT] and key[K_UP]:
                contador=-1
                orientacion="noreste"
                pos_x,pos_y,flagDerecha=CarreraNE(screen,contador,pos_image2,pos_x,pos_y,flagDerecha)
            elif key[K_RIGHT] and key[K_DOWN]:
                contador=-1
                orientacion="sureste"
                pos_x,pos_y=CarreraSE(screen,contador,pos_image2,pos_x,pos_y)
            elif key[K_LEFT] and key[K_UP]:
                contador=-1
                orientacion="noroeste"
                pos_x,pos_y=CarreraNO(screen,contador,pos_image2,pos_x,pos_y)
            elif key[K_LEFT] and key[K_DOWN]:
                contador=-1
                orientacion="suroeste"
                pos_x,pos_y=CarreraSO(screen,contador,pos_image2,pos_x,pos_y)
            elif key[K_RIGHT]:
                contador=-1               
                pos_x,pos_y=CarreraDer(screen,contador,pos_image2,pos_x,pos_y)
                orientacion="este"
            elif key[K_LEFT]:
                contador=-1
                orientacion="oeste"
                pos_x,pos_y=CarreraIzq(screen,contador,pos_image2,pos_x,pos_y)
            elif key[K_DOWN]:
                contador=-1
                orientacion="sur"
                pos_x,pos_y=CarreraAbj(screen,contador,pos_image2,pos_x,pos_y)
            elif key[K_UP]:
                contador=-1
                orientacion="norte"
                pos_x,pos_y=CarreraArba(screen,contador,pos_image2,pos_x,pos_y)


el movimiento y todo lo demás me funciona bien, lo que pasa es que hace ese "doble movimiento".

¿Cómo podría evitarse esto?¿Quizás haciendo un key2?

Gracias de antemano
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Personaje animado

Notapor endaramiz » Mié Feb 11, 2009 3:55 pm

Juanxo escribió:El problema es que cuando hago las diagonales, primero me hace un movimiento hacia el lado y luego hace la diagonal.
el movimiento y todo lo demás me funciona bien, lo que pasa es que hace ese "doble movimiento".

¿Cómo podría evitarse esto?¿Quizás haciendo un key2?

Pues no se si lo he entendido bien, pero a mí me parece de lo más normal que primero vaya hacia un lado y luego en diagonal ya que es difícil pulsar las dos teclas en el mismo ciclo (porque dura muy poco).

No se me ocurre como evitarlo.

Saludos.
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona

Notapor Juanxo » Mié Feb 11, 2009 6:20 pm

Si, si entiendo que es complicado que se pulsen las dos justo a la vez, pero quería saber si existía posibilidad de conseguir evitarlo.A lo mejor ralentizandolo un poco con un reloj o algún detector que salte si se pulsan los dos a la vez para evitar que se vaya a la derecha??
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Ayuda a la orden!

Notapor Carlos Guevara Moscol » Mar Mar 10, 2009 5:03 pm

Hola juanxo, espero comprendas que no puedo entender del todo el problema que estas experimentando, me gustaria que nos dieras mas detalle de este mismo para ver que solucion podemos darle.

Mira, necesito saber cosas como a que velocidad se ejecuta tu juego, o mas especificamente con que frecuencia se actualiza la pantalla de tu juego porque en un juego comun y corriente se estila llevar una frecuencia de entre 30 y 50 FPS (frames per second o cuadros por segundo) con lo cual cada cuadro tiene una duracion de entre 20 ms y 33,34 ms. ahora si tu problema es que al pulsar (arriba) +(derecha) se ejecutan 2 movimientos, te comento que realmente eso es lo que ocurre siempre en los juegos mas comunes, lo que pasa es que ese "primer cuadro" (el que hace el movimiento que no esperamos o no queremos que haga) dura unos instantes, es cuestion de milisegundos, por lo que muchas veces no lo notamos.

Por lo tanto, si tu problema es que se ven 2 movimientos, entonces hay que enfocarnos en eso, en "¿por que se ven 2 movimientos?" si normalmente el primero deberia ser tan rapido que no lo veriamos.

Espero dejarme entender :S, el verdadero problema no es que hay 2 movimientos sino el que "vemos los 2" cuando no deberiamos ver el primero.

:D para esto yo veo 2 posibles causas... la primera es que tu frecuencia de muestreo es muy lenta (menos de 20 FPS) por lo que nuestro ojo tiene tiempo para notar ese primer cuadro, o primer movimiento.
Y la segunda es que tu personaje se desplaza mucho en cada ciclo, asi por mas que no veamos el primer cuadro si vemos que el personaje se ha desplazado en una direccion que no es la que esperabamos al comienzo y recien a partir de ahi se mueve en diagonal.

Es por eso que te digo que necesitamos mas detalles, por favor dinos cada cuanto tiempo se actualiza tu juego, cuanto se desplaza tu personaje en cada ciclo de la animacion, y cualquier otro dato que te paresca relevante. Si esas no son las causas la cosa es mas complicada y tendriamos que examinar mas a fondo tu codigo, aunque en una primera ojeada que le he hecho al codigo que colgaste no encuentro error alguno. :D espero que todo te salga bien y que respondas tmb :P

PD: perdon si escribo demasiado pero asi soy yo :D

Saludos y muchos Exitos!!!
ta XVR el mIRC, ya conecte :D, ahora q hago
??:S
Carlos Guevara Moscol
 
Mensajes: 26
Registrado: Vie Feb 29, 2008 10:32 pm
Ubicación: Perú

Notapor Juanxo » Mar Mar 10, 2009 6:12 pm

Buenas Carlos:

Mi problema era(y es) que yo tngo los tiles de las animaciones en las ocho direcciones y quiero que se mueva en diagonal si pulso las dos teclas adecuadas, pero cuando lo hago, se carga primero una de las direcciones y luego la diagonal.

Gracias por la ayuda.

PD: escribir nunca esta de más
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Notapor Geo » Jue Mar 12, 2009 7:45 am

Podrías colocar un pequeño retardo antes de tomar la acción respondiendo a las teclas.
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México


Volver a Propuestas de desarrollo y concursos

¿Quién está conectado?

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