Bueno tengo una duda que creo que es relativamente facil, pero no e encontrado la forma de arreglarla y en google no encuentro nada, es un action rpg en un plataformas, el personaje golpea con la espada al estilo castlevania, lo e echo creando un objeto con el sprite del personaje atacando, este se activa al pulsar la tecla space (la de atacar), y al colisionar con el enemigo , el enemigo se destruye, tambien e usado variables para detectar la direccion desde la que ataca y usar el sprite de ataque adecuado (izquierda o derecha), luego con animation end, pongo change instance y recupero otra vez el objeto del jugador, todo va bien pero hay un problema, y es que como el sprite del jugador es mirando a la derecha, al atacar a la izquierda, ataca a la izquierda y luego cambia al sprite del jugador pero mirando a la derecha, lo que queda mal xD, espero que me hayan entendidoy me puedan ayudar ya que yo creo quedebe ser facilisimo de arreglar pero e probado varias cosas y nada.
Quieres decir que ataca a la izquierda, pero de inmediato se vuelve a mostrar el sprite para la derecha sin que presiones la flecha derecha? No entendí bien. Sin ver tu código es difícil, al menos para mi.
Claro despues de atacar a la izquierda cambia al sprite del jugador parado a la derecha, en vez de cambiar al de parado a la izquierda, lo de atacar va bien, es despues de atacar, me imagino que el problema es por que el sprite del objeto del jugador es mirando a la derecha, por eso despues de la animacion de atacar, si atacas a la derecha despues de la animacion con change instance vuelve al objeto del jugador que esta a la derecha y se ve bien, pero al atacar a la izquierda, despues del ataque en vez de quedarse parado mirando a la izquierda, con change instance como vuelve el objeto del jugador y este es un sprite mirando a la derecha se queda mirando a la derecha, quiero saber como despues del ataque a la izquierda se quede el sprite parado del protagonista mirando a la izquierda.
crea una variable global
asi global.dir=0; luegop establece los parametros de donde mira en los event de teclado
osea key left global.dir=180; event key right global.dir=0;
event create
switch(global.dir) {
case 180: sprite_index= mirando isquierda break;
case 0: sprite_index= mirando derecha break;
}
asi al iniciar el event create verifica donde miro por ultima vez y asi el sprite sera al lado que miro por ultima vez
Ohh... no digo que no sea válido lo que haces, pero nunca he visto un ejemplo con change_instance para controlar hacia donde mira el personaje
Lo más frecuente según mi experiencia es centrar el origen del sprite (en el eje x, y si quieres en el eje y) en las propiedades del sprite (no importa si el sprite original está orientado hacia la derecha o hacia la izquierda)
Y después, cuando quieres que el sprite "mire" hacia el otro lado, comunmente se usa
image_xscale = -1
para "espejear" el sprite o invertir de posición (horizontalmente) los pixeles, con lo que cambie la orientación hacia el lado contrario. Y como ves, no se necesita cambiar de instancia, en todo momento es una sola, pero con su sprite "invertido".
elviskelley : ¿y la variable global donde la meto? por que no me esta dando resultado xD estoy usando antes de eso variable dir para las direcciones a lo mejor tengo que quitarlas o algo.
Penumbra: no hombre no uso change instance para controlar donde mira el personaje xD, eso lo hago usando una variable dir pero no global, el change instance es para la accion de atacar.
Perdon por el doble post pero pongo un video del juego para que veais el fallo si os fijais al atacar a la izquierda el sprite vuelve a la derecha:
Saludos makero sanchez1994:
Dices que usas el "change_instance" para el ataque... Por qué simplemente no utilizas el cambio de "sprites" en vez del cambio de instancias. Es menos costoso...
En el objeto colocas una variable que indique la dirección (mirar_direccion) en que está mirando (0)izquierda (1) derecha
Otra variable (estado) que indique el estado en que está el personaje: "caminando", "atacando", "parado", "agachado", etc.
Un "script" que contenga un "switch" para el estado, por ejemplo:
Citarswitch (estado)
{
case "caminando"
if(mirar_direccion == 0)
{ sprite_index = spr_caminar_izquierda; }
else { sprite_index = spr_caminar_derecha; }
break;
case "atacando"
if(mirar_direccion == 0)
{ sprite_index = spr_atacar_izquierda; }
else { sprite_index = spr_atacar_derecha; }
break;
case "agachado"
if(mirar_direccion == 0)
{ sprite_index = spr_agachar_izquierda; }
else { sprite_index = spr_agachar_derecha; }
break;
}
nota: Colocas que cuando acabe cada animación de cada "sprite" vaya al estado neutro que desees, por ejemplo "parado" o que se repita la animación mientras no cambie de estado. Por cierto los cambios de estados se realizan por presionar algún botón, por ejemplo el de atacar, desplazarse a la izquierda o agacharse, etc...
No se si entiendes lo que digo... A mi me parece menos costoso y más fácil si quieres agregar nuevos estados.
Gracias por la atención prestada y disculpen las molestias ocasionadas. ;D