Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: aleeyam en Enero 14, 2013, 01:16:56 AM

Título: Cambiar de sprite con if
Publicado por: aleeyam en Enero 14, 2013, 01:16:56 AM
Buenas comunidad, hace an~os que no posteaba por aquí!

Vayamos al punto. Me encuentro recién aprendiendo a usar GML, pero no logro hacer lo siguiente:
Evento Create

//Variable direccion.  0=derecha, 1=izquierda
dir=0;


Evento Step
//Derecha
if dir=0
{
if x=x+3
{
sprite_index=sprite3
image_speed=.2
}
else
sprite_index=sprite4
}
//Izquierda
if dir=1
{
if x=x-3
{
sprite_index=sprite2
image_speed=.2
}
else
sprite_index=sprite0
}


Lo que trato de hacer en este pedazo de código, es: Si la variable dirección tiene valor 0, es decir, a la derecha, el esprite de mi personaje es aquel que mira hacia la derecha. Pero, si ademas de que la variable tiene valor 0, y la variable de la coordenada en X se suma a si misma 3 unidades, debe cambiar a un sprite animado en el que mi personaje avanza hacia la derecha. El código termina haciendo lo mismo pero inversamente, es decir, a la izquierda.

Este es mi codigo al presionar la tecla Izquierda:
dir=1;
if place_free(x-1,y)
{
x-=3
}


Y este al presionar la tecla Derecha:
dir=0;
if place_free(x+1,y)
{
x+=3
}


Lo que si funciona: Según la tecla que presione, izquierda o derecha, la variable "dir" (dirección) cambia de valor, haciendo así que mi personaje apunte a la dirección en que avanza.

Lo que no funciona: Cuando mi personaje se mueve, su sprite no cambia a uno en que la animación de la sensación de que el personaje corre.

Soy un noob aun esto del código, espero puedan resolver mi duda. Desde ya, gracias.
Título: Re:Cambiar de sprite con if
Publicado por: calio en Enero 14, 2013, 01:44:29 AM
El problema está donde dice...

if x=x+3

...y donde dice...

if x=x-3

...pues, básicamente, le estás pidiendo al programa que compruebe si la variable x es igual a si misma mas o menos tres, lo cual siempre va a ser falso, porque x siempre es igual a x.
Lo que necesitas hacer es revisar el valor de x con respecto al valor anterior de x, o lo que es lo mismo, xprevious.

Entonces, en el primer caso, donde x tiene que ser mayor a xprevious, mi solución es poner:

if (x > xprevious)

y así mismo, donde tiene que ser menor,

if (x < xprevious)


Espero que te haya ayudado :) me avisas si tienes problemas con el código.
Título: Re:Cambiar de sprite con if
Publicado por: aleeyam en Enero 14, 2013, 04:09:11 AM
Excelente, me ha funcionado muy bien.