Nella mappa (512x512) sono presenti 900 istanze (provvisorie, verranno eliminate dopo).
Ognuna di queste istanze ha un index che ne rappresenta l'Area: l'istanza con index 1 fa parte dell'area 1, l'istanza con index 400 fa parte dell'area 400.
Il codice che genera queste istanze (punti)
Codice: Seleziona tutto
// Generazione di punti
var i , j, xCell, yCell, gridSize=WORLDSIZE-32, dotIndex=0;
for (i = 0; i <CELLROW; i++) {
for (j = 0; j <CELLCOL; j++) {
xCell = (gridSize/CELLCOL) * j;
yCell = (gridSize/CELLROW) * i;
xCell += 16 + irandom(CELLSIZE-1);
yCell += 16 + irandom(CELLSIZE-1);
dotIndex ++;
dot[dotIndex] = instance_create(xCell, yCell, oDot);
dot[dotIndex].Index = dotIndex;
show_debug_message(string(dotIndex)+" "+string(j)+" "+string(i)+" xs="+string(xCell)+" ys="+string(yCell));
ds_grid_set(global.gridPoints,j,i,dotIndex); //da 1 a 900 rappresentano l'index dell'area
}
}
Codice: Seleziona tutto
// Assegnazione dell'area per ogni singolo punto della mappa
var i, j;
for (i = 0; i <WORLDSIZE-1; i++) {
for (j = 0; j <WORLDSIZE-1; j++) {
Nearest = instance_nearest(i,j,oDot);
ds_grid_set(global.gridArea,i,j,Nearest.Index);
var area = ds_grid_get(global.gridArea,i,j);
show_debug_message("x="+string(i)+" y="+string(j)+" Area="+string(area));
}
}
Ovviamente il caricamento è un po' lungo, ma non è quello che mi preoccupa.
Il problema è che, una volta chiuso il programma, l'IDE di Game Maker 2 si pianta e si può chiudere solo dalla task di Windows.
Ho pensato di aver fatto fare troppi calcoli nello stesso step, così ho pensato di disattivare i oDot sicuramente troppo lontani dal pixel in esame, con codice qua sotto
Codice: Seleziona tutto
// Disattivazione instanze sicuramente troppo lontane
instance_deactivate_object(oDot);
instance_activate_region(i-24,j-24,48,48,1);
Voi come fareste? Avete qualche idea? Magari qualcosa di completamente diverso dalla base concettuale dalla quale sono partito.