Julio 09, 2010, 05:14:56 PM Ultima modificación: Julio 10, 2010, 01:33:07 AM por J.E.A
Quiero que un enemigo que al chocar con una pared se voltee y continue caminando de modo contrario, pero a la vez cambie de direccion el sprite del enemigo al estilo la tortuga de mario (Koopa troopa). Acobo de crear este codigo con ayuda de un engine pero me da muchos fallos, como que se voltea pero continuamente y sin chocar con la pared


if place_meeting(x+8,y,PlataformaMario)
{hspeed=-1

hspeed1 = -hspeed1}


else

if place_meeting(x-8,y,PlataformaMario)
hspeed=1

hspeed1 = -hspeed1



if hspeed1 < 0
image_xscale = 1
if hspeed1 > 0
image_xscale = -1



Posiblemente me de un prblema qcon la plataforma de mario? porque la misma plataforma donde camina mario se la puse como pared al enemigo sera que me de problema? que le tenga que comner un "place_meeting" o algo asi?

si no es mucho pedir alguien me haria un ejemplo con el cambio de direccion de un enemigo sin usar mas sprites u otros objetos para que cambie la direccion, usando un solo sprite con image_scale? tengo muchisima duda con esto. Les voy a agradecer mucho ???
Cada día que pasa estoy mas enamorado de Holly Earl.

pon esto en el step del koopa troopa:
if place_meeting(x+8,y,PlataformaMario)
{
hspeed=-1
image_xscale=-1
}
else if place_meeting(x-8,y,PlataformaMario)
{
hspeed=1
image_xscale=1
}

no deberia haber problema si usas PlataformaMario para mario o para el koopa, ya que para los 2 objetos, PlataformaMario actua de diferente manera para ambos, no incide el comportamiento que tenga mario con koopa al interactuar con PlataformaMario
suerte ;)

Gracias pero no funciono porque en step tengo esto

if place_free(x,y+1) gravity=1

if not place_free(x,y+1) gravity=0


move_contact_solid(direction,1);
vspeed=0



En donde tendria que ponerlo entonces?

Elimino lo que hay en step?
Cada día que pasa estoy mas enamorado de Holly Earl.

ponlo asi en el step:
if place_free(x,y+1) gravity=1
if not place_free(x,y+1) gravity=0

if place_meeting(x+8,y,PlataformaMario)
{
move_contact_solid(direction,1)
hspeed=-1
image_xscale=-1
}
else if place_meeting(x-8,y,PlataformaMario)
{
move_contact_solid(direction,1)
hspeed=1
image_xscale=1
}

ahorra si tendria que andar

Tampoco me funciono pero de todas maneras no veo nada raro y segun veo el codigo tendria que funcionar a la perfeccion. En realidad no se mucho pero con lo que aprendi GML lo que veo raro es que no funcione el codigo y que el enemigo no haga nada, transpasa las paredes como si nada ???

Paso mi adjunto si pueden revisarlo

PD: No es la tortuga, es el bicho negro ese que le pegas con el Mario fuego y no se muere. Pero es lo mismo no creo que infrinja en el problema, dije tortuga porque no sabia el nombre del bicho
Cada día que pasa estoy mas enamorado de Holly Earl.

#5 Julio 10, 2010, 12:25:45 AM Ultima modificación: Julio 10, 2010, 12:32:01 AM por Qwert
He modificado un poco tu adjunto y me ha funcionado, lo vuelvo a adjuntar. Creo que la soluci?n de 15689 es m?s correcta pero es un m?todo distinto al que usabas, as? te cambio menos el juego.
He cambiado primero el c?digo de colisi?n entre el bicho y la pared, y queda as?:
if place_meeting(x+8,y,PlataformaMario)
{hspeed=-1
image_xscale = 1
}


else

{
hspeed=1
image_xscale = -1
}
Comprueba si se est? chocando por un lado y cambia la velocidad y la imagen, si no es as?, es porque se est? chocando por el otro lado, y entonces pone la velocidad y la imagen hacia all?. Si te fijas he quitado la variable hspeed1, que no era necesaria, y en lugar de eso he usado el image_xscale a la vez que cambio de direcci?n.

El segundo cambio es m?s dif?cil de explicar: lo que hace image_xscale es rotar la imagen alrededor de un eje, este eje lo puedes cambiar en las propiedades del sprite. Donde pone Origin, se define donde est?n estos ejes. Para que al girar el sprite del bicho no ocurran cosas raras, este eje debe pasar por el centro del sprite. Como el sprite tiene 17 pixeles de largo, he puesto en las propiedades del sprite que Origin en x sea 8 (La mitad m?s o menos), as? gira bien.
Para entenderte con esto te sugiero que pruebes cambiando este valor poniendolo una vez en 0 y otra en 8, as? entender?s mejor todo este rollo XD

Espero que te sirva y suerte. :)

Un saludo

Editado:
PD. Por cierto, es bueno que los tama?os de tus sprites sean potencias de 2 como 4*4, 8*8, 16*16... As? se ahorra memoria (no me preguntes por qu? XD). Si cambias el tama?o del sprite del bicho a 16*16 (quit?ndole un pixel) conseguir?s que sea potencia de 2 y que adem?s su centro sea par, para que al ponerle el eje de Origin en 8, sea exactamente en su mitad y gire mejor.
Espero haberme explicado bien, me cuesta mucho poner por escrito lo que voy pensando XD Esto tampoco es tan importante, si no quieres complicarte no es necesario.

Muchas muchas gracias! ahora funciona perfecto, ahora si se como se hacen que los personajes volteen para otro lado al colisionar XD
Cada día que pasa estoy mas enamorado de Holly Earl.