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 einsetzenwinkel++;
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 ForumLesen
///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