Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: wilmerroa en Diciembre 20, 2018, 04:14:20 AM

Título: Colisionar con objetos generados, que esten en la misma posición Y [RESUELTO]
Publicado por: wilmerroa en Diciembre 20, 2018, 04:14:20 AM
Saludos a Todos en la Comunidad:

Miren necesito ayuda con esto, trabajo en un juego tipo runner, y en los juegos runner hay objetos que se van generando dentro de la room, dando la impresión de que en mi caso mi jugador se está moviendo pero solo se mueven las demas instancias, el problema es que el jugador se mueve en 3 carriles sin moverse de su posición en x;  se generan instancias en cada carril; el alto de mi jugador ocupa los 3 carriles y pues colisiona con todo lo que viene de frente y no puedo hacer que solo colisione con las instancias que estan en su misma posición Y , ya que se generan las mismas instancias para los 3 carriles, utilizando objetos. Graficamente es asi:
(https://i.ibb.co/Z1CtWXZ/Juego-runner-01.jpg) (https://ibb.co/JFP05th)
Así lo programo:
Script Generador:
{
    alarm[0] = 93;
    i = choose (c_1,c_2,c_3,c_4) // Obstáculos
    j = choose (cb_1,cb_2,cb_3,cb_4) // Monedas y obstáculos
    a = choose (t_1,t_2,t_3,t_4,t_5)  /// Diamantes
    h = choose(692,618,525); /// posicion y de los objetos que se generan
       
        script_execute(choose(i,i,i,a,a),irandom(1));
}


Ejemplo de 1 script que genera la posición de los obstáculos
nombre : c_1
instance_create(room_width+(8*32) , 692 , obj_box); // obstáculo
instance_create(room_width+(8*32) , 618 , obj_box);
instance_create(room_width+(12*32) , 525 , obj_coin); // moneda
instance_create(room_width+(20*32) , 525 , obj_box);
instance_create(room_width+(20*32) , 618 , obj_coin);


No utilizo el evento de colisión, solo hago esto que vi en un video para cuando colisiona el Objeto obstáculo con el Jugador,
y es casi igual con las monedas , diamantes etc.
Evento Step:
if place_meeting(x,y,obj_player)

{
    psvida -=10; // se resta la vida del jugador
}


Y creo un objeto en blanco para llamar al scrip Generador Principal
No se si con esto es suficiente para explicar mi problema !! agradecere la ayuda.
Título: Re:Colisionar con objetos generados, que esten en la misma posición y
Publicado por: Jucarave en Diciembre 20, 2018, 04:28:21 AM
Es curioso yo estoy planeando un juego así  XD 2 cosas para solucionarlo.

1. cambia la mascara de colisión del sprite (editando el sprite) para que solo ocupe sus pies

2. haz que el jugador y los obstáculos sepan en que carril están. luego cuando hagas la colisión verificas que estén en el mismo carril:

[gml]
var idObstaculo = instance_place(x, y, objPlayer);
if (idObstaculo != noone && idObstaculo.carril == carril) {
  psVida -= 10;
}
[/gml]

utilizo instance_place en vez de place_meeting para saber cual es la instancia con la que colisione, fuera de eso son lo mismo.
Título: Re:Colisionar con objetos generados, que esten en la misma posición y
Publicado por: wilmerroa en Diciembre 20, 2018, 04:44:20 AM
Ok Jucarave lo entiendo, pero como debo hacer para señalar cada carril, lo que pasa es yo coloco un fondo que contempla tambien los carriles, es decir que son parte del mismo fondo. Lo que hago es decirle al Player que se mueva en 3 coordenadas en Y fijas ( digamos 500, 550 , 600 con unos botones ). No se si me explico !!
Título: Re:Colisionar con objetos generados, que esten en la misma posición y
Publicado por: Jucarave en Diciembre 20, 2018, 05:02:38 AM
por lo que entiendo, este es tu script para generar una serie de obstaculos:

[gml]
instance_create(room_width+(8*32) , 692 , obj_box); // obstáculo
instance_create(room_width+(8*32) , 618 , obj_box);
instance_create(room_width+(12*32) , 525 , obj_coin); // moneda
instance_create(room_width+(20*32) , 525 , obj_box);
instance_create(room_width+(20*32) , 618 , obj_coin);
[/gml]

ahí es donde debes decirle en que carril estan:

[gml]
var obstaculo;

obstaculo = instance_create(room_width+(8*32) , 692 , obj_box); // obstáculo
obstaculo.carril = 3; //por decir algo

obstaculo = instance_create(room_width+(8*32) , 618 , obj_box);
obstaculo.carril = 2;

instance_create(room_width+(12*32) , 525 , obj_coin); // moneda

obstaculo = instance_create(room_width+(20*32) , 525 , obj_box);
obstaculo.carril = 1;

instance_create(room_width+(20*32) , 618 , obj_coin);
[/gml]

Si el jugador inicia en el medio por ejemplo, entonces en el evento create puedes poner que esta en el carril 2

[gml]
carril = 2;
[/gml]

Y luego cuando presiones arriba para cambiar de carril, le restas 1 y cuando baje de carril le sumas 1