Hola Equipo! ante nada feliz año nuevo...
Ahora si, makeros necesito una pequeña mano...

hice un pequeño codigo para mi juego de plataformas para poder trepar de las esquinas (como lo hacia earth worm jim, the flistones ect..) es el siguiente..

en step de mi personaje

if collision_circle(x, y, 80, esquina, false, true) && place_free(x,y+5) //esquina es un objeto cuadro de 32 x32
{trepo=1}
else
{trepo=0};


if place_free(x,y+5) && trepo=1 //si estoy en el aire e hice el contacto con la esquina
{
  move_contact_solid(direccion,20);
//me pego a la pared ("direccion es una variable mìa que identifica izquierda, 0 grados o derecha, 180 grados)
  y=esquina.y+80;
//y me pego a la altura de la esquina
  gravity = 0;
  vspeed=0;
//y ya no me caigo

  sprite_index = trepando;
// la imagen es ahora coeherente a la accion
};

el resultado es lo que esperaba salto y me pego a la esquina a la altura que debe ser...
pero e aquí mi problema..


cuando generé otras "esquinas" de las cuales treparme el valor "y" que devuelve es el de la primer instancia esquina que cree..  :(

¿como puedo hacer para que mi personaje tome la altura de la esquina a la cual me estoy trepando actualmente y no a la de la primera instancia que coloque en el room?,

probé con...

y=other.y+80;

peron nada  ???

gracias de antemano makeros!!



Un problema bien planteado, es un problema resuelto.

Visita mi grupo de desarrollo >>>
http://www.comunidadgm.org/index.php?topic=18299.0

crea un object objParentEsquina y coloca todas las Esquinas de parent con ese objet
y aqui collision_circle(x, y, 80, esquina, false, true) cambialo mejor por collision_rectangule y el object al que verificar es el parent osea este objParentEsquina

Malas noticias.. no pude lograrlo. Ahora si entiendo como se usa Parent.. pero el objeto hijo contiene su propia coordenada "y" y por mas que lo emparente con la esquina padre siempre va a tener diferente "y"..

expongo un gráfico para explicar mejor lo que pasa...

fíjense como en la segunda imagen el personaje trepa pero a la altura del primer bloque esquina (amarillo), checkeen el código mas arriba y ayúdenme por favoooor !  :'(


Un problema bien planteado, es un problema resuelto.

Visita mi grupo de desarrollo >>>
http://www.comunidadgm.org/index.php?topic=18299.0

#3 Enero 04, 2013, 08:40:03 PM Ultima modificación: Enero 04, 2013, 08:59:34 PM por penumbra
No sé si funcione, pero creo que debes hacer algo así

sujetar = collision_circle(x, y, 80, objParentEsquina, false, true)

cuando haya una colisión, la variable 'sujetar' va a contener la id de LA ESQUINA HIJA CORRECTA (con la que hiciste contacto). si no hay colisión con ninguna esquina,  sujetar = número negativo..

Cuando compruebes que hay colisión con una esquina y que está en el aire, usarías algo como

with(sujetar) {

}


y dentro de los corchetes, pones el código para posicionar correctamente al personaje. Más o menos algo parecido a


obj_mi_personaje.gravity = 0
obj_mi_personaje.y = y +/- valor


donde:
obj_mi_personaje.y = la posición vertical del jugador
y = la posición vertical de la esquina HIJA con la que hay contacto

EDITO: La vspeed y el sprite del personaje también lo debes cambiar dentro de los corchetes, refiriéndote a ellos externamente, como la gravedad y la posición vertical del ejemplo

Mmm bueno, esa es mi sugeerencia, a ver si me expliqué bien.  ;D

Hola Penumbra muy atento al responderme... pero no pude hacer lo que me sugeriste...tal vez no entendi del todo...

me quedo así...


sujetar =  collision_circle(x, y, 80, esquina, false, true);

with (sujetar)
{
  move_contact_solid(direccion,20);
  y = esquina.y+80;
  gravity = 0;
  vspeed=0;
  sprite_index = trepando;
};


cuando mi personaje salta y colisiona con la esquina pasan cosas raras...
creo que voy a encarar la pocision "y" de otra forma...
Un problema bien planteado, es un problema resuelto.

Visita mi grupo de desarrollo >>>
http://www.comunidadgm.org/index.php?topic=18299.0

#5 Enero 05, 2013, 12:49:14 AM Ultima modificación: Enero 05, 2013, 07:04:45 AM por penumbra
Citarcuando mi personaje salta y colisiona con la esquina pasan cosas raras...

En tu ejemplo, el código y = esquina.y+80; }no va a afectar a la "ye" del personaje, sino a la "ye" del objeto esquina. Además, el código que puse fue como sugerencia, no está totalmente adaptado a tu juego, pero creo que sería así.


trepo  = collision_circle(x, y, 80, objParentEsquina, false, true) //el objeto que pongas aquí debe ser PARENT
if (place_free(x,y+5))  && (trepo > 0) // Si estás en el aire y hay contacto con alguna esquina HIJA
{
move_contact_solid(direccion,20); //Mover al jugador

with (trepo)                              //Elegir la instancia esquina correcta, 'descartar' las otras que existen en el room
{
obj_Player1.y = y + 80;
obj_Player1.gravity = 0;
obj_Player1.vspeed=0;
obj_Player1.sprite_index = trepando;
}

}



Como mencioné antes, el objeto que usas en collision_circle o collision_rectangle debe ser PARENT, no HIJO. Dentro de los corchetes, te faltó poner el nombre de tu objeto jugador. Mientras estés dentro del with, y quieres modificar propiedades del objeto jugador, tienes que usar el formato

nombre_de_objeto_jugador.variable

Es decir, substituye obj_Player1. con el nombre del objeto de tu personaje.

Citar¿como puedo hacer para que mi personaje tome la altura de la esquina a la cual me estoy trepando actualmente y no a la de la primera instancia que coloque en el room?

Al usar with, estás "saliendo" del objeto jugador y estás "entrando al dominio" del objeto esquina. Esa entrada a la instancia especificada por trepo es lo que te permite elegir la esquina correcta, en lugar de que sea siempre la primera esquina que colocaste en el room.

Pero al entrar a la esquina correcta, ya no puedes llamar a las variables del jugador como lo hacías fuera del with. Es decir, la variable gravity AHORA es la gravedad de la esquina referenciada por trepo. Mientras estés dentro de WITH, la gravedad del jugador se llama así obj_jugador.gravity.

Graciaaaaaaaasss.penumbra! Lo logre funcionó jaja.,te agradezco mucho eres un genio! Trepa de maravilla
Un problema bien planteado, es un problema resuelto.

Visita mi grupo de desarrollo >>>
http://www.comunidadgm.org/index.php?topic=18299.0