Abril 25, 2014, 06:38:29 PM Ultima modificación: Abril 25, 2014, 08:10:15 PM por LowHertzs
Hola makeros!, tengo un juego donde el personaje puede andar en ambas direcciones en 2d, y hay escaleras que puede subir.

Lo que quiero con código es que detecte que esta colisionando con las escaleras y presionando "UP" y cambie el sprite al de "player_escalando".

Lo he intentado de varias maneras, pero me responde de una manera un tanto rara, primeramente no consigo que se vea la imagen del sprite subiendo y por otro lado me altera las animación del personaje normal.

¿Alguna solución?

**EDITO:

Estoy usando el siguiente código para intentar esto, pero no me funciona:
if keyboard_check(vk_right) and place_meeting(x+1,y+1, obj_escalera) then sprite_index = spr_dog_scalling

Se supone que lo que intento hacer con este código es lo siguiente; si se está pulsando la tecla "UP" y el personaje está tocando el "obj_escalera" entonces el sprite del jugador cambia a "spr_dog_Scalling".
Saludos
"Y cuando termines de hablar... te callas."

Prueba usando los eventos keyboard (up), y dentro de este pon lo siguiente:

if (place_meeting(x+3,y-5,obj_escalera))
{
    y-=2;
    sprite_index=sprite2;
}

En down

if (place_meeting(x+3,y+5,obj_escalera))
{
    y+=2;
    sprite_index=sprite2;
}

right:

x+=2;
sprite_index=sprite1;
image_xscale=1;

y left:

x-=2;
sprite_index=sprite1;
image_xscale=-1;

Con eso debería funcionarte de una forma podo refinada, pero suficiente para solventar tu problema :)

Eso realmente "funciona" casi perfectamente..

Estoy usando este código para los cambios del sprite:

//Sets the player sprites
if hspeed=0 then sprite_index=spr_dog_still1 else sprite_index=spr_dog_running1
if hspeed>0 then flipped=-1
if hspeed<0 then flipped=1
if (place_meeting(x+3,y-5,obj_escalera))
{
    y-=2;
    sprite_index=spr_dog_scalling;
}
if (place_meeting(x+3,y+5,obj_escalera))
{
    y+=2;
    sprite_index=spr_dog_scalling;
}


El problema viene en que yo no quiero que cambie el sprite solo cuando toca la escalera, si no cuando está colisionando con la escalera y además se está pulsando la tecla "UP", es decir las dos cosas. Ademas de eso, ahora cuando me acerco a la escalera, automáticamente se pone a subirla y tampoco deseo eso.
"Y cuando termines de hablar... te callas."

Pero tienes que ponerlo dentro de los eventos keyboard como te he dicho arriba :P de esa forma, sólo cuando se toque la escalera y se pulse arriba o abajo, subirá o bajará ;)

#4 Abril 26, 2014, 01:16:15 PM Ultima modificación: Abril 26, 2014, 01:26:35 PM por LowHertzs
Cita de: learsi en Abril 26, 2014, 08:17:28 AM
Pero tienes que ponerlo dentro de los eventos keyboard como te he dicho arriba :P de esa forma, sólo cuando se toque la escalera y se pulse arriba o abajo, subirá o bajará ;)

Creo que me expliqué mal, si pongo tu código en los eventos "key press UP, y key press DOWN" no me funciona, es decir, toco la escalera, y la subo con la imagen del sprite normal, no se cambia.

Pero si pongo tu código en el evento Draw que uso para cambiar la imagen del sprite si me funciona, pero con esos fallos que te comenté, como que con solo tocar la escalera ya se cambia la imagen aunque no esté subiendo.

Este es el evento Draw que utilizo, puede ser que sea, que entra en conflicto con tu código?

//Sets the player sprites
if hspeed=0 then sprite_index=spr_dog_still1 else sprite_index=spr_dog_running1
if hspeed>0 then flipped=-1
if hspeed<0 then flipped=1
if (place_meeting(x+3,y-5,obj_escalera))
{
    y-=2;
    sprite_index=spr_dog_scalling;
}
if (place_meeting(x+3,y+5,obj_escalera))
{
    y+=2;
    sprite_index=spr_dog_scalling;
}





**EDITO:

Lo he arreglado haciendo uso del: if (place_meeting(x+3,y-5,obj_escalera)) and keyboard_check(vk_up)
{
    y-=2;
    sprite_index=spr_dog_scalling;
}
if (place_meeting(x+3,y+5,obj_escalera)) and keyboard_check(vk_down)
{
    y+=2;
    sprite_index=spr_dog_scalling;
}


Ahora funciona, y solo cuando pulso la tecla "up" y toco la escalera, el sprite cambia a "escalando", pero ahora surge otro problema, cuando estás subiendo la escalera, y sueltas la tecla "up" el esprite cambia al normal, es decir se queda en la escalera con el sprite "normal" y yo quiero que si ya está subiendo que se quede el sprite de "escalando".
"Y cuando termines de hablar... te callas."

Hola de nuevo,

sin ver el código entero, diría que en algún lado estás asignando el sprite normal cuando no hay movimiento, con lo que cuando te paras, aparece de nuevo.

No sé si esta parte la habrás cambiado, pero es posible que esta línea sea la causante de ello:

if hspeed=0 then sprite_index=spr_dog_still1 else sprite_index=spr_dog_running1