Game Maker: Voorbeeldscripts m.b.t. bestanden

Game Maker bevat diverse functies om met bestanden te werken. Hieronder zullen enkele voorbeelden worden gegeven van toepassingen.

Bestandsgrootte detecteren

Met het volgende script kunt u de bestandsgrootte van een gegeven bestand meten. Het enige argument is de bestandsnaam. De bestandsgrootte in bytes wordt geretourneerd.

var file, size;
file = file_bin_open(argument0,0);
size = file_bin_size(file);
file_bin_close(file);
return size;

Volledige bestandsinhoud lezen of vervangen

Met onderstaand script krijgt u een volledige inhoud van een bestand in een tekenreeks. Het maakt gebruik van de binaire functies. Er is één argument vereist: de bestandsnaam (eventueel inclusief een pad).

var file, contents;
contents = "";
file = file_bin_open(argument0, 0);
repeat(file_bin_size(file))
 contents += chr(file_bin_read_byte(file));
file_bin_close(file);
return contents;

Onderstaand tweede script kan worden gebruikt om de inhoud van een bepaald bestand volledig te vervangen door een tekenreeks, of, indien het bestand nog niet bestaat, de tekenreeks in een bestand op te slaan. Dit script vereist twee argumenten, namelijk de bestandsnaam en de op te slane tekenreeks.

var file;
file = file_text_open_write(argument0);
file_text_write_string(file, argument1);
file_text_close(file);

Dit zou uiteraard ook met de binaire functies gedaan kunnen worden, maar dit is een stuk sneller, aangezien er geen for-lus meer gebruikt hoeft te worden. Bij het leesscript is wel gekozen voor binaire functies, aangezien het lezen anders stopt bij regelovergangen.

Vrije bestandsnaam genereren

Er kunnen soms situaties zijn waarin u een bestand met een bepaalde naam wilt opslaan, tenzij een bestand met die naam al bestaat. Dit script gebruikt een bestandsnaam als invoer, kijkt of het niet bezet is, en als dat wel het geval is probeert het script het achtereenvolgens opnieuw door achtereenvolgens (2), (3), (4) enzovoort achter de bestandsnaam te plaatsen. Het eerste argument is de bestandsnaam (eventueel inclusief een pad). Het tweede argument is een optionele boolean die aangeeft of het eerste bestand dat geprobeerd moet worden, van het nummer 1 moet worden voorzien. Indien het tweede argument is weggelaten, wordt false aangenomen. Het script retourneert de eerst mogelijke vrije bestandsnaam.

var ext, index, fname;
ext = filename_ext(argument0);
index = 1;
if(argument1)
 fname = filename_change_ext(argument0, " (1)" + ext);
else
 fname = argument0;
while(file_exists(fname))
{
 index += 1;
 fname = filename_change_ext(argument0, " (" + string(index) + ")" + ext);
}
return fname;

Map doorzoeken

Dit script zoekt in de opgegeven map inclusief submappen naar bestanden met een bepaalde extensie en zet de gevonden bestanden in een queue-datastructuur. Er zijn drie argumenten: achtereenvolgens het volgnummer van de queue, het pad naar de map (inclusief laatste backslash) en de extensie (kleine letters, inclusief punt). Omdat dit script recursief is (d.w.z. dat het zichzelf aanroept), moet dit script file_find_enqueue worden genoemd.

var queue, file, full;
queue = ds_queue_create();
file = file_find_first(argument1 + "*", 51);
if(file != "")
 do
 {
  full = argument1 + file;
  if(file_attributes(full, fa_directory))
  {
   if(file != "." && file != "..")
    ds_queue_enqueue(queue, full);
  }
  else
  {
   if(string_lower(filename_ext(file)) == argument2)
    ds_queue_enqueue(argument0, full);
  }
  file = file_find_next();
 }
 until(file == "");
file_find_close();
repeat(ds_queue_size(queue))
 file_find_enqueue(argument0, ds_queue_dequeue(queue) + "\", argument2);
ds_queue_destroy(queue);

0 reacties

Voeg een reactie toe