Hola gente bonita!
Había dejado GM de lado hace como un año y ahora creo que estoy retomando mi pequeño proyectito que tuve :3, estuve buscando algún comando que haga algo como esto: if previous_hspeed = -2 { bla bla bla...
Intenté buscar aquí http://www.comunidadgm.org/propuestas-y-soporte/glosario-gml-funciones-constantes-y-sentencias-(en-proceso-de-optimizaci243n)/ (y aprovecho de agradecer a la comunidad por ese tema :3) pero no pude encontrar algo parecido lo que busco :S
Cómo puedo hacer algo así? Muchas gracias :D
mmm... déjame pensar...
Ya!: Puedes ir dejando una variable "rastro" que se limite al hspeed antes de ser modificado, por ejemplo:
Evento en el que cambias hspeed:
previus_hspeed = hspeed;
hspeed += nueva_hspeed;
No estoy completamente seguro de que funcione, pero inténtalo a ver si sirve...xD
Vaya, olvidé agregar un detalle o mi pregunta sería muy obvia.
Es que tengo dos sprites que los quiero agregar a una misma velocidad, o sea:
Un perro que estaba caminando hacia la izquierda y se detiene (velocidad 0). Al detenerse se sentará mirando a la izquierda.
Pero también quiero que haga que si estaba caminando a la derecha y se detiene, se sienta con su debido sprite mirando a la derecha.
Lo malo es que para ambos casos la velocidad será 0 pero no sé como pueda diferenciar cuando iba a la derecha o a la izquierda :S
Saludos.
[EDITO] Publiqué esto antes de ver tu mensaje, veré cómo puedo hacerlo con ese código, lo vi a primera vista, gracias por responder :D
A ver...
Cita de: KratosSeba en Octubre 11, 2015, 10:30:11 PM...Un perro que estaba caminando hacia la izquierda y se detiene (velocidad 0). Al detenerse se sentará mirando a la izquierda.
Pero también quiero que haga que si estaba caminando a la derecha y se detiene, se sienta con su debido sprite mirando a la derecha.
Lo malo es que para ambos casos la velocidad será 0 pero no sé como pueda diferenciar cuando iba a la derecha o a la izquierda :S
Saludos...
Si entendí bien, lo que quieres es que cuando el perro pare: Sí iba a la izquierda, cambie el sprite al de perro_izquierda, y si va a la derecha, cambie el sprite al de perro_derecha...¿no?
Si es así, es fácil:
Evento: Perro se queda quieto...xD
if hspeed >0 //Si la velocidad es mayor que cero (valor positivo+, osea: derecha)
sprite_index = perro_derecha; //el sprite se vuelve el del perro mirando a la derecha
if hspeed <0 //Si la velocidad es menor que cero (valor negativo-, osea: izquierda)
sprite_index = perro_izquierda; //el sprite se vuelve el del perro mirando a la izquierda
hspeed = 0;
exit;
Como siempre, código no comprobado, pero de seguro funciona
Hmm, si es que entiendo bien (soy noob aún :D), ese código me sirve cuando el perro está en movimiento. Por ahora solo puedo hacer que si está con hspeed = 0, está sentado y a la izquierda, pero no puedo hacer que si está con velocidad 0 y antes tenía velocidad hacia la derecha, se quede sentado con esa orientación :S
Mi código actualmente es este:
[gml]if hspeed = 2 {
sprite_index = animDER; }
if hspeed = 2 {
hspeed = probabilidad ("-2%0.05, 0%0.05, 2%99.9*"); }
if hspeed = -2 {
sprite_index = animIZQ; }
if hspeed = -2 {
hspeed = probabilidad ("-2%99.9, 0%0.05, 2%0.05*") }
if hspeed = 0 {
hspeed = probabilidad ("0%99.9, -2%0.05, 2%0.05*"); }
if animDER {
image_speed = 0.2; }
if animIZQ {
image_speed = 0.2; }[/gml]
:)
espera, WAT!!!
Citarif hspeed = 2 {
hspeed = probabilidad ("-2%0.05, 0%0.05, 2%99.9*"); }
Probabilidad?.. qué es eso???
Es solo un pequeño script que tengo que fue actualizado desde aquí : http://www.comunidadgm.org/desarrollo-de-scripts/listas-probables-v2/
Pero aún no consigo resolver mi duda T_T (no sé por que no puedo poner emoticonos xd)
ah, ok... sigamos..xD
Según lo que entendí, quieres hacer que: 1)- El perro se mueve. 2)- al parar, comprobar si antes de parar estaba yendo a la izquierda o a la derecha. 3)- Si anteriormente ida a la derecha, cambiar su sprite al sprite del animDER, si iba a la izquierda, ponerse el de animIZQ
si lo que puse es correcto, podría arreglarse así.
evento en el que el perro para:
previous_hspeed = hspeed;
hspeed = 0;
if previous_hspeed <0
sprite_index = animIZQ;
if previous_hspeed >0
sprite_index = animDER;
Si no esta solución no resuelve tu duda, por favor tómate tu tiempo en explicarme detalladamente tu problema y qué quieres hacer...soy tontito...xD
Exactamente eso quiero
Pero el código: previous_hspeed no existe, lo inventé para dar a entender mi problema :S
Lo que quieres hacer es más sencillo de lograr si en lugar de dos sprites (uno para la izquierda y otro para la derecha) usas un solo sprite. Otro beneficio es que el código se reduce considerablemente.
El sprite lo puedes voltear o "espejear" ajustando la variable image_xscale, por ejemplo image_xscale = -1. Al usar este método (un sólo sprite + ajustar la orientación mediante image_xscale), una vez que detengas la velocidad, el sprite va a quedar orientado en la dirección en la que se venía moviendo sin recurrir a más código.
Cita de: penumbra en Octubre 11, 2015, 11:21:44 PM
Lo que quieres hacer es más sencillo de lograr si en lugar de dos sprites (uno para la izquierda y otro para la derecha) usas un solo sprite. Otro beneficio es que el código se reduce considerablemente.
El sprite lo puedes voltear o "espejear" ajustando la variable image_xscale, por ejemplo image_xscale = -1. Al usar este método (un sólo sprite + ajustar la orientación mediante image_xscale), una vez que detengas la velocidad, el sprite va a quedar orientado en la dirección en la que se venía moviendo sin recurrir a más código.
mmm... algo más práctico..jejejej...
Cita de: KratosSeba en Octubre 11, 2015, 11:15:14 PM
Exactamente eso quiero
Pero el código: previous_hspeed no existe, lo inventé para dar a entender mi problema :S
y el código previous_hspeed obviamente no existe, es una variable que TÚ debes crear. debes inicializarla poniendo en el event create:
CREATE:
previous_hspeed = 0;
y después puedes modificarla como quieras...xD
Estoy en ello, veré si puedo hacer funcionar esto xDD
Gracias a ambos :D, ya les comento como me va con sus aportes.
Bueno, vengo recién entrando al PC, lo intenté a la primera y por fin lo logré ^_^
Así me quedó el código:
[gml]prev_hspeed = hspeed;
if hspeed = 2 {
sprite_index = animDER; }
if hspeed = 2 {
hspeed = probabilidad ("-2%0.05, 0%0.05, 2%99.9*"); }
if hspeed = -2 {
sprite_index = animIZQ; }
if hspeed = -2 {
hspeed = probabilidad ("-2%99.9, 0%0.05, 2%0.05*") }
if hspeed = 0 {
hspeed = probabilidad ("0%99.9, -2%0.05, 2%0.05*"); }
if prev_hspeed = -2 and hspeed = 0 {
sprite_index = perro_sit_IZQ } ;
if prev_hspeed = 2 and hspeed = 0 {
sprite_index = perro_sit_DER } ;
if animDER {
image_speed = 0.2; }
if animIZQ {
image_speed = 0.2; }[/gml]
Lo de quitar una orientación y solo invertir la otra lo intentaré en otro momento, ahora no me quiero calentar tanto la cabeza jejeje.
Gracias a ambos :)
SOLUCIONADO