Mam ogromnych rozmiarów ds_grid, który jest zapełniony tylko w niewielkim stopniu gdzieś na środku. Muszę pozbyć się zbędnej przestrzeni. Próbowałem zrobić to w ten sposób:
GML
for(xx=0;xx<w;xx+=1)
{
if(ds_grid_value_exists(ds_maze,xx,0,xx,h,-1)){x_min=xx;break}
}
for(xx=w;xx>0;xx-=1)
{
if(ds_grid_value_exists(ds_maze,xx,0,xx,h,-1)){x_max=xx;break}
}
for(yy=0;yy<h;yy+=1)
{
if(ds_grid_value_exists(ds_maze,0,yy,w,yy,-1)){y_min=yy;break}
}
for(yy=h;yy>0;yy-=1)
{
if(ds_grid_value_exists(ds_maze,0,yy,w,yy,-1)){y_max=yy;break}
}
w=x_max-x_min+3
h=y_max-y_min+3
ds_copy=ds_grid_create(w,h)
ds_grid_clear(ds_copy,1)
ds_grid_set_grid_region(ds_copy,ds_maze,x_min-1,y_min-1,x_max+1,y_max+1,0,0)
ds_grid_resize(ds_maze,w,h)
ds_grid_clear(ds_maze,1)
ds_grid_set_grid_region(ds_maze,ds_copy,0,0,ds_grid_width(ds_copy),ds_grid_height(ds_copy),0,0)
ds_grid_destroy(ds_copy)
Wartość 1 oznacza puste, -1 zajęte.