Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: ElKopiraih en Mayo 19, 2019, 10:55:50 pm

Título: Detectar 3 objetos iguales juntos
Publicado por: ElKopiraih en Mayo 19, 2019, 10:55:50 pm
Lo que quiero hacer es que al estar 3 objetos iguales en vertical y horizontal juntos se destruyan. ¿Esto se puede hacer? Gracias de antemano.
Título: Re:Detectar 3 objetos iguales juntos
Publicado por: artmaker en Mayo 20, 2019, 06:24:06 am
un método podría ser usando cuadriculas y que el objeto solo pueda moverse de cuadricula en cuadricula:

(https://i.ibb.co/b2WjGK0/Screenshot-3.png)

entonces bastaría con un:

Código: [Seleccionar]
if place_meeting(x,y-1,object) and place_meeting(x,y+1,object) and place_meeting(x+1,y,object) and place_meeting(x-1,y,object){
// ocurra algo
}


   
Título: Re:Detectar 3 objetos iguales juntos
Publicado por: Seirlord_Games en Mayo 20, 2019, 03:02:06 pm
Si te refieres a un juego del estilo Candy Crush, lo que puedes hacer es un controlador, y que cuando se realice un movimiento o una acción del jugador, este haga lo siguiente:
- Primero de todo tendrias que tener la zona de juego como una cuadricula, que cada caramelo o lo que sea cubra una celda.
- Entonces el controlador recorre recursivamente todas las celdas (de arriba a abajo, de abajo a arriba, izquierda a derecha.... o personalizado), y cuando encuentre un caramelo haga una comprobación en 4 direcciones. Si por ejemplo, hay un caramelo igual en la  parte inferior, entonces, comprobará si en su parte superior hay otro identico y entonces serán 3, y si no hay uno igual arriba, comprueba dos niveles abajo. Y lo mismo para horizontal.
- Si encuentra que se juntan 3, rompe el bucle y destruye esos caramelos, y hace que los caramelos que tengan que bajar, bajen.
- Cuando los caramelos no se muevan, haz que el controlador haga otra busqueda (esto permite combos), con un movimiento explotan varios.

Nunca he hecho un juego así, pero si los he jugado, y yo diría que la lógica va en ese sentido. A ver si hay alguien aquí que los ha hecho y te lo puede decir con exactitud.

¡Un saludo!
Título: Re:Detectar 3 objetos iguales juntos
Publicado por: ElKopiraih en Mayo 20, 2019, 03:21:33 pm
Muchas gracias a los dos! Ya lo he conseguido hacer. Si a alguien le interesa saberlo también aquí porgo lo que he hecho (es algo bastante sencillo, pero bueno):
He creado 2 objetos, y en uno (object0) he puesto en step:
if place_meeting(x,y-1,object0) and place_meeting(x,y+1,object0){
    instance_create(x+0,y+1,object1)
    instance_create(x+0,y-1,object1)
    instance_destroy()
}
if place_meeting(x+1,y,object0) and place_meeting(x-1,y,object0){
    instance_create(x+1,y+0,object1)
    instance_create(x-1,y+0,object1)
    instance_destroy()
}

Gracias a ese codigo se crearán 2 otros objetos (object1) que lo que hacen es romper los otros bloques que están en los lados, el object1 tiene en codigo de colisión contra el object0:
if place_meeting(x,y-1,object0) and place_meeting(x,y+1,object0){
    instance_destroy()
    with(other) instance_destroy()
}
if place_meeting(x+1,y,object0) and place_meeting(x-1,y,object0){
    instance_destroy()
    with(other) instance_destroy()
}
Es muy simple y tal vez se podría hacer algo mejor, pero es lo que se hacer. Muchas gracias Seirlord_Games y artmaker por ayudarme!
Título: Re:Detectar 3 objetos iguales juntos
Publicado por: Seirlord_Games en Mayo 20, 2019, 03:26:17 pm
Si tienes varios objetos que realicen esa consulta en un evento step, pueden surgirte bugs y consumes bastantes recursos. Te recomiendo que te plantees lo de usar un controlador si tiene muchos objetos  ;)

¡Un saludo!
Título: Re:Detectar 3 objetos iguales juntos
Publicado por: artmaker en Mayo 20, 2019, 06:22:33 pm
que bueno que se pudo solucionar!, olvide mencionar también que con

Código: [Seleccionar]
place_snapped()
move_snap()

pueden ayudarte a verificar y mover por cuadriculas tus objetos