Code Schnipsel Sammlung

Code Schnipsel Sammlung für Game Maker

Alle Instanzen im Raum durchlaufen

for (n = 0; n < instance_count; n++;)
{
   with (instance_id[n])
    {
        Code zB x=10;y=2;
    }
}


Objekt in Richtung eines Punktes drehen

dev_x := device_mouse_x(0) - (room_width/2);
dev_y := device_mouse_y(0) - (room_height/2);
winkel := radtodeg(arctan2(dev_y,dev_x)); // gleich als Winkel anstatt Bogenmaß ausgeben
draw_sprite_ext(meinsprite,0,room_width/2,room_height/2, 1, 1,-winkel, -1, 1 );


Instanzen in einem Orbit/Kreis bewegen

Code in einem Step Event einsetzen

winkel++;
if (winkel>360) winkel-=360;
x := tx + cos(degtorad(winkel)) * r; // tx=horiz. Zentrum des Kreises, r=Radius
y := ty + sin(degtorad(winkel)) * r; // ty=vert. Zentrum des Kreises, r=Radius


Screen Wrap

if (x<0 || x>room_width) x=room_width - x;
if (y<0 || y>room_height) y=room_height - y;


Prüfen ob eine Zahl Grade oder Ungerade ist

(Ungerade Zahlen 1,3,5,7,...11,...17 Grade Zahlen:2,4,6,...12,14)

if (x&1)
{
       // Wahr wenn x ungerade (1,3,5,....) ist
}



Binäres schreiben und lesen in einer INI Datei

Quelle: Game Maker Forum

Lesen

///binaryIN(buffer, typeList)
//returns a ds_map
var listLen, map;
listLen = ds_list_size(argument1)/2;
map = ds_map_create();
buffer_seek(argument0, buffer_seek_start, 0);
 
for (var i = 0; i < listLen; ++i) {
    map[? argument1[| i*2]] = buffer_read(argument0, argument1[| (i*2)+1]);
}
return map;
 

Schreiben

///binaryOUT(typeList, dataMap)
//returns a buffer, if an element in the ds map is not found it will write a zero
var b, listLen, i;
typeList = argument0;
dataMap = argument1;
listLen = ds_list_size(typeList)/2;
b = buffer_create(1, buffer_grow, 1);
 
for (var i = 0; i < listLen; ++i) {
    if ds_map_exists(dataMap, typeList[| (i*2)])
        buffer_write(b, typeList[| (i*2)+1], ds_map_find_value(dataMap,typeList[| (i*2)]) );
    else
        buffer_write(b, typeList[| (i*2)+1], 0);
}
return b;

Beispiel

Daten Speichern
//Einige Daten zum Speichern anlegen:
playDat = ds_map_create();
playDat[? "score"] = 553736;
playDat[? "lives"] = 7;
playDat[? "xPos"] = -2503;
playDat[? "name"] = "Garry";

//define how big/type of elements in the ds_map
typeL = ds_list_create();
ds_list_add(typeL, "score", buffer_u32, "lives", buffer_u8, "xPos", buffer_s32, "name", buffer_string);

//Create the buffer holding our data
buffer = binaryOUT(typeL, playDat);
Daten Laden
gameSave = buffer_load("gamesave.bin");
OUTPUTMAP = binaryIN(gameSave, typeL);

Healthbar Anzeigemit einem Sprite

Das Sprite sollte aus zwei Bildern bestehen. Das erste Bild ist die Blanko-Anzeige und das zweite ist das Gefüllte. Die Healtbar wird von links nach rechts gefüllt. Wenn man den Code etwas anpasst, geht das auch in alle anderen richtungen.


//draw_bar_sprite(BarSprite,DispStatVal,DispStatMax,x,y);
//Sprite must contain 2 subimages. 
//sub0 = The outline. if  you desire no outline leave this as a blank subimage.
//sub1 = The fill. For HP bars this is usually red and glossy looking.

BarSprite = argument0; 
DispStatVal = argument1;
DispStatMax = argument2;
xpos = argument3;
ypos = argument4;

draw_sprite_part(bar_outline,0, 0, 0,sprite_get_width(BarSprite), sprite_get_height(BarSprite),xpos,ypos);
draw_sprite_part(bar_outline,1, 0, 0,((DispStatVal/DispStatMax)*sprite_get_width(BarSprite)),sprite_get_height(BarSprite),xpos,ypos);





Errorlogging

Ein sehr nützliches Script um Fehler im Code zu finden.
Quelle: Game Maker Forum

Script 1

/// log_error(string type, string error)



var type = argument0;
var error = argument1;
var date_time = date_date_string(date_current_datetime()) + " " + date_time_string(date_current_datetime());

ini_open("error_log.ini");
    ini_write_string(type, date_time, error);
ini_close();

Beispiel

log_error("fatal", "unable to load resource");
log_error("non fatal", "unable to play sound");

Ausgabe
Dateiname sieht so aus error_log
Inhalt:
[non fatal]
14:21:14 AM=unable to load resource
[fatal]
14:21:14 AM=unable to load resource



Script 2

/// log_error_sep(string type, string error)

var type = argument0;
var error = argument1;
var time = date_time_string(date_current_datetime());
var date = date_date_string(date_current_datetime());
var file = string_replace_all(date, "/", "-") + " error_log.ini";

ini_open(file);
    ini_write_string(type, time, error);
ini_close();

Beispiel

log_error_sep("fatal", "unable to load resource");
log_error_sep("non fatal", "unable to play sound");

Ausgabe
Dateiname kann zB so aussehen: 8-3-2014 error_log
Inhalt:
[non fatal]
8/3/2014   14:21:14 AM=unable to load resource
[fatal]
8/3/2014   14:21:14 AM=unable to load resource

Sprite als Schriftart definieren

Create:
global.SpecialFont=font_add_sprite(s_FontSprites,ord(' '),false,0)
Draw:
draw_set_font(global.SpecialFont)
draw_set_color(c_white)

Einfache links/rechts steuerung

hspeed = (keyboard_check(vk_right)-keyboard_check(vk_left))*5;

Schneller den Background zeichnen mit D3D


var col;
if (argument0 >= argument2) or (argument1 >= argument3)
{
  return(0);
}

col = draw_get_color();
draw_set_color(c_white);
d3d_draw_floor(argument0,argument1,0,argument2,argument3,0,
 background_get_texture(argument4),
 (argument2-argument0)/background_get_width(argument4),
 (argument3-argument1)/background_get_height(argument4));
draw_set_color(col);
return(1);

Sub-Images vor- oder rückwärts drehen

image_index+=((put an expression here, like (x==y))*2)-1;

Wallslide Script

var xmot, ymot;
x=xprevious;
y=yprevious;
for (i=0; i<90; i+=5) //For even better results change the 5 to 1... But it can cause lag...
 {
 xmot=x+lengthdir_x(speed,direction+i);
 ymot=y+lengthdir_y(speed,direction+i);
 if !place_meeting(xmot,ymot,other){x=xmot;y=ymot;exit;}
 xmot=x+lengthdir_x(speed,direction-i);
 ymot=y+lengthdir_y(speed,direction-i);
 if !place_meeting(xmot,ymot,other){x=xmot;y=ymot;exit;}
 }

Keine Kommentare:

Kommentar veröffentlichen