Hola.
El problema que tengo, es que al saltar, y moverme, el sprite cambia al de movimiento, y eso hace arruinar el salto...

Lo que quiero es que mientras que este en el aire no pueda cambiar a otro que no sea el de saltando...

Supongo que es por eso que salta mal...

Les dejo la info de mi personaje

CitarInformation about object: dulop_parado

Sprite: dulop_parado
Solid: true
Visible: true
Depth: 0
Persistent: false
Parent: <no parent>
Mask: <same as sprite>

Step Event:
execute code:

scr_gravity(); //Llamamos al script que va a calcular la gravedad
if keyboard_check_pressed(vk_up) && !place_free(x,y+1) vspeed=-12; //El salto

Collision Event with object suelo_1:
execute code:

move_contact_solid(direction,vspeed); vspeed=0;

Collision Event with object borde_derecho:
execute code:

move_contact_solid(direction,vspeed); vspeed=0;

Collision Event with object borde_izquierdo:
execute code:

move_contact_solid(direction,vspeed); vspeed=0;

Collision Event with object suelo_2:
execute code:

move_contact_solid(direction,vspeed); vspeed=0;

Collision Event with object suelo_3:
execute code:

move_contact_solid(direction,vspeed); vspeed=0;

Collision Event with object suelo_4:
execute code:

move_contact_solid(direction,vspeed); vspeed=0;

Collision Event with object ladrillo:
execute code:

move_contact_solid(direction,vspeed); vspeed=0;

Collision Event with object elevador:
start moving in directions 000000010 with speed set to 5

Other Event: Outside Room:
restart the current room with transition effect Fade out and in

Key Press Event for <Left> Key:
set the sprite to dulop_izquierda with subimage 0 and speed 1
start moving in directions 000100000 with speed set to 5

Key Press Event for <Right> Key:
set the sprite to dulop_derecha with subimage 0 and speed 1
start moving in directions 000001000 with speed set to 5

Key Release Event for <Left> Key:
set the sprite to dulop_paradoizq with subimage 0 and speed 1
start moving in directions 000010000 with speed set to 0

Key Release Event for <Right> Key:
set the sprite to dulop_parado with subimage 0 and speed 1
start moving in directions 000010000 with speed set to 0

C?digo de gravedad
if !place_free(x,y+1) gravity:=0 else gravity:=0.8;

if vspeed>12 vspeed:=12;

#1 Octubre 29, 2009, 10:19:34 PM Ultima modificación: Octubre 29, 2009, 10:22:48 PM por ferhand
Hola Makero:

Creo que tu problema puedes resolverlo chequeando si la gravedad es distinta de cero o la velocidad vertical es distinta de cero, antes de cambiar de sprite. Ya que si es cero est? sobre el suelo, de lo contrario est? en el aire y no quieres que cambie el sprite.

Ejemplo:


Key Press Event for <Left> Key:
if(vspeed = 0) /* o puede ser la gravedad (gravity = 0)*/
{
  set the sprite to dulop_izquierda with subimage 0 and speed 1
}
start moving in directions 000100000 with speed set to 5

Key Press Event for <Right> Key:
if(vspeed = 0) /* o puede ser la gravedad (gravity = 0)*/
{
  set the sprite to dulop_derecha with subimage 0 and speed 1
}
start moving in directions 000001000 with speed set to 5

Key Release Event for <Left> Key:
if(vspeed = 0) /* o puede ser la gravedad (gravity = 0)*/
{
 set the sprite to dulop_paradoizq with subimage 0 and speed 1
}
start moving in directions 000010000 with speed set to 0

Key Release Event for <Right> Key:
if(vspeed = 0) /* o puede ser la gravedad (gravity = 0)*/
{
 set the sprite to dulop_parado with subimage 0 and speed 1
}
start moving in directions 000010000 with speed set to 0

Espero lo entiendas. Aunque podr?a hacerse de otras formas...

ferhand


hola, tambien podrias poner un contador desde el momento que se pulsa la tecla, con los eventos Alarm, mas o menos que dure el tiempo en que el objeto salta, cuando se acaban los steps que cambie el sprite, no se si me explico, 1 saludo y suerte

Cita de: ferhand en Octubre 29, 2009, 10:19:34 PM
Hola Makero:

Creo que tu problema puedes resolverlo chequeando si la gravedad es distinta de cero o la velocidad vertical es distinta de cero, antes de cambiar de sprite. Ya que si es cero est? sobre el suelo, de lo contrario est? en el aire y no quieres que cambie el sprite.

Ejemplo:


Key Press Event for <Left> Key:
if(vspeed = 0) /* o puede ser la gravedad (gravity = 0)*/
{
  set the sprite to dulop_izquierda with subimage 0 and speed 1
}
start moving in directions 000100000 with speed set to 5

Key Press Event for <Right> Key:
if(vspeed = 0) /* o puede ser la gravedad (gravity = 0)*/
{
  set the sprite to dulop_derecha with subimage 0 and speed 1
}
start moving in directions 000001000 with speed set to 5

Key Release Event for <Left> Key:
if(vspeed = 0) /* o puede ser la gravedad (gravity = 0)*/
{
 set the sprite to dulop_paradoizq with subimage 0 and speed 1
}
start moving in directions 000010000 with speed set to 0

Key Release Event for <Right> Key:
if(vspeed = 0) /* o puede ser la gravedad (gravity = 0)*/
{
 set the sprite to dulop_parado with subimage 0 and speed 1
}
start moving in directions 000010000 with speed set to 0

Espero lo entiendas. Aunque podr?a hacerse de otras formas...

ferhand

Entiendo mas o menos... En que parte tengo que poner lo de "if(vspeed)..." ?

?Me pueden ayudar? Es que sin el salto no puedo continuar el juego :S

if !place_free(x,y+1) gravity:=0 else gravity:=0.8;

if vspeed>12 vspeed:=12;

que son los dos puntos? pon esto en el script

if place_free(x,y+1) {gravity=1; gravity_direction=270;}
if !place_free(x,y+1) {gravity=0; gravity_direction=270;}

Y crea un objeto llamado obj_wall_parent, entonces en cada objeto de walls, veo que tienes muchos, le pones como parent al obj_wall_parent (encima de donde pones la mask, debajo de persistent, visible... ) todos los walls con los que colisiona el personaje y en los cuales creas el mismo evento de colision con el mismo code, tan solo lo pones en colision con el parent, asi contara, ese mismo evento como si lo duplicaras con los demas que tienen marcado al parent, asi solo creas un evento de colision no tantos!

Hola Makero dulop:

Disc?lpame por la demora, es que no tengo acceso a Internet todos los d?as.
La respuesta a la duda de donde poner el c?digo es ponerlo exactamente donde est? la acci?n de asignar el sprite:

CitarKey Press Event for <Left> Key:
if(vspeed = 0) /* o puede ser la gravedad (gravity = 0)*/
{
   set the sprite to dulop_izquierda with subimage 0 and speed 1
}
start moving in directions 000100000 with speed set to 5
Exactamente, lo que haces es usar el D&D (Drag and Drop) para asignar el movimiento. Bueno, usando D&D puedes expresar ese c?digo. La imagen a continuaci?n expresa mejor que yo ese ejemplo.
....??

Bueno, evidentemente no tengo la menor idea de como subir una imagen ac?. Pero creo que saldr? como un adjunto de este mensaje. La abres, la observas y te dar?s cuenta enseguida.
nota: La imnagen solo trae el ejemplo parael evento de la tecla Izquierda y no tiene nombre el sprite, p?ngaselo usted mismo. Cualquier duda, me conectar? de nuevo el jueves o el viernes.



Hice todo tal cual y como me dec?s, pero no pasa nada... cuando salto el sprite no se cambia... y anda todo re mal D:

Hagamoslo mas facil... Lo que quiero es que mientras yo est? en el aire, no pueda cambiar a ningun sprite...

si no quieres que cambie el sprite mientras este en el aire coloca en step:

if vspeed>0{sprite_index=//aqui el sprite cayendo}

if vspeed<0{sprite_index=//aqui el sprite subiendo}

Orgulloso veterano de CGM
El poder de hacer un buen juego esta en tus manos.

#9 Noviembre 04, 2009, 09:27:32 PM Ultima modificación: Noviembre 04, 2009, 10:10:32 PM por elviskelley
mira es facil solo chequea si esta en el aire antes del cambio del sprite si esta en el aire no cambia de sprite y si no lo esta podra cambiar de sprite.
tambien puedes aprobechar esto para usar un sprite de salto.
en la pesta?a control dale click a lo que parece una hoja de papel, (execute code) ahi escribe esto.

if !place_free(x,y+1) {sprite_index=dulop_izquierda } else {sprite_index=salto_dulop_izquierda}
esto lo pones en el event de la tecla left.
explico que hice primero verifica si esta sobre algun object en este caso el piso, si esta sobre el piso puede cambiar de sprite de animacion, pero si esta en el aire, solo podra cambiar a la animacion de salto.
Lo are en D&D y adjunto la imagen...


Gracias a todos por sus ayudas, ya salta bien el personaje!

Gracias por su tiempo