Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Detectar 3 objetos iguales juntos  (Leído 226 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 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.

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado artmaker

Respuesta #1 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:



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
}


   

 
Los siguientes usuarios dieron las gracias a este tema: ElKopiraih


Desconectado Seirlord_Games

  • Asiduo
  • *
  • Puntos: 271
  • Mensajes: 183
  • Agradecido: 33 veces
  • Sexo: Masculino
  • Esfuérzate por tus sueños, sino es imposible.
    • Ver Perfil
Respuesta #2 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!

 
Los siguientes usuarios dieron las gracias a este tema: ElKopiraih


Desconectado ElKopiraih

Respuesta #3 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!

 


Desconectado Seirlord_Games

  • Asiduo
  • *
  • Puntos: 271
  • Mensajes: 183
  • Agradecido: 33 veces
  • Sexo: Masculino
  • Esfuérzate por tus sueños, sino es imposible.
    • Ver Perfil
Respuesta #4 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!


Desconectado artmaker

Respuesta #5 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