Mängumeistrid
Näide parem ds_grid_write [GM Studio] - Printerisõbralik versioon

+- Mängumeistrid (http://www.suvaline.org/MM)
+-- Foorum: Mängumeistrid (/forumdisplay.php?fid=3)
+--- Foorum: Abi, õpetused ja näited (/forumdisplay.php?fid=5)
+--- Teema: Näide parem ds_grid_write [GM Studio] (/showthread.php?tid=520)



parem ds_grid_write [GM Studio] - braffolk - 11.03.2014 23:37

Hei!
Olen tükk aega jamanud ds_grid-ide salvestamisega arvutisse, ning see et 1000x1000 grid võtab 23mb mälu on paras lollus ning multiplayer mängudes üldse võimatu saata gride ds_grid_write-i abil.

Seega otsustasin teha enda oma kasutades buffereid, väikestel grididel on palju kiirem kui ds_grid_write kuid suurtel jääb juba kiirusega alla.

Faili suuruste võrdlus :
256x256 grid
minu meetoD:
0,25mb
.zip faili pandud game makeri abil :
79kb
ds_grid_write:
1.5mb
.zip faili pandud game makeri abil :
108kb
1000x1000 grid
minu meetoD:
3.81mb
.zip faili pandud game makeri abil :
1.12mb
ds_grid_write:
22.8mb
.zip faili pandud game makeri abil :
1.6mb

Download
.gmz - https://dl.dropboxusercontent.com/u/142483113/examples/custom%20ds_grid%20save.gmz
.exe - https://dl.dropboxusercontent.com/u/142483113/examples/custom%20ds_grid%20save.exe

Kasutusvõimalused

salvestamine failina:
Vormindatud kood:
buf ds_grid_buffer_creategrid );
buffer_savebuf working_directory "file" );
buffer_deletebuf ); 

laadimine failist:
Vormindatud kood:
grid ds_grid_create(1,1);
ds_grid_buffer_loadgrid working_directory "file" ); 

multiplayeris saatmine:
Vormindatud kood:
buf ds_grid_buffer_creategrid );
network_send_packetsocket buf buffer_get_sizebuf ) );
buffer_deletebuf ); 

multiplayeris vastuvõtmine:
Vormindatud kood:
var buffer ds_map_find_valueasync_load "buffer" );
var 
socket ds_map_find_valueasync_load "id" );
buffer_seekbuffer buffer_seek_start );
ds_grid_buffer_read(grid,buffer

Võimalusi on palju veel , need on lihtsalt kõige tähtsamad Angel



Scriptid
Vormindatud kood:
///ds_grid_buffer_create(grid)
var ds_buf,ww,hh,i;

ww ds_grid_widthargument0 );
hh ds_grid_heightargument0 );
ds_buf buffer_createww*hh buffer_grow );
 
buffer_seek(ds_bufbuffer_seek_start0);
 
buffer_write(ds_bufbuffer_u16ww);
 
buffer_write(ds_bufbuffer_u16hh);
 
0;
repeatww ){
    
0;
    
repeathh ){
        
buffer_writeds_buf buffer_u16 ds_grid_getargument0 ) );
        
j++;
    }
i++;
}
return (
ds_buf); 
Vormindatud kood:
///ds_grid_buffer_load(grid,buffer_file)
var ds_buf,ww,hh,i;

ds_buf buffer_loadargument1 )
buffer_seek(ds_bufbuffer_seek_start0);
ww buffer_readds_buf buffer_u16);
hh buffer_readds_buf buffer_u16);
ds_grid_resize(argument0,ww,hh);
ds_grid_clear(argument0,0);


0;
repeatww ){
    
0;
    
repeathh ){
        
ds_grid_setargument0 jbuffer_readds_buf buffer_u16) )
        
j++;
    }
i++;
}
buffer_delete(ds_buf)
return (
true); 
Vormindatud kood:
///ds_grid_buffer_read(grid,buffer)
var ds_buf,ww,hh,i;


buffer_seek(argument1buffer_seek_start0);
ww buffer_readargument1 buffer_u16);
hh buffer_readargument1 buffer_u16);
ds_grid_resize(argument0,ww,hh);
ds_grid_clear(argument0,0);


0;
repeatww ){
    
0;
    
repeathh ){
        
ds_grid_setargument0 jbuffer_readargument1 buffer_u16) )
        
j++;
    }
i++;