Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Marth en Julio 14, 2018, 06:47:25 PM

Título: Colisionar con casillas grid
Publicado por: Marth en Julio 14, 2018, 06:47:25 PM
Veran, tengo este código con el que creo un Grid:

global.mapa = mp_grid_create(0,0,room_width/casilla,room_height/casilla,casilla,casilla)
mp_grid_add_instances(global.mapa,Muro,false)
mp_grid_add_instances(global.mapa,Meta,true)


Ahora digamos que creo un objeto al cual al crearlo le pongo este código:

if(!place_empty(x,y)) instance_destroy()

Esto hace que si la posición que tenia al crearlo choca con Muro o Meta se autodestruira. Pero digamos por ejemplo que destrullo todos los Muro pero no elimino las cuadriculas del grid.
Pues se crea el objeto, no se destruye al no encontrar nada, pero al estar en una casilla "llena", tiene dificultades para desplazarse, ya que usa un sistema de path que aprovecha ese grid.
Tengo que hacer que en vez de comprobar si choca con otro objeto, choca con un grid. ¿Cómo se hace?
Título: Re:Colisionar con casillas grid
Publicado por: 3dgeminis en Julio 14, 2018, 11:47:46 PM
Busca en la AYUDA la funcion mp_grid_get_cell, viene con un ejemplo que es lo que necesitas.
Título: Re:Colisionar con casillas grid
Publicado por: Marth en Julio 15, 2018, 01:43:54 AM
Cita de: 3dgeminis en Julio 14, 2018, 11:47:46 PM
Busca en la AYUDA la funcion mp_grid_get_cell, viene con un ejemplo que es lo que necesitas.

Siguiendo tu consejo, en el evento de creación ahora tengo esto:

if(!compruebo()) instance_destroy()

Siendo el script "compruebo" el siguiente código:

for(global.a=bbox_left; global.a<=bbox_right; global.a++)
   for(global.b=bbox_top; global.b<=bbox_bottom; global.b++)
      if(mp_grid_get_cell(global.mapa,floor(global.a/casilla),floor(global.b/casilla))==-1)
         return false
return true
Título: Re:Colisionar con casillas grid
Publicado por: 3dgeminis en Julio 15, 2018, 07:19:55 PM
No pude hacerlo funcionar usando un script, pero si coloco el codigo directamente en el objeto funciona
[gml]
if mp_grid_get_cell(global.mapa, x div casilla, y div casilla)==-1 {instance_destroy()}
[/gml]