GameMaker - Studio
GameMaker: Studio är ett program som låter dig skapa spel och applikationer på de flesta stora plattformar. Besök engelska Wikibooks om du vill ha en mer komplett lärobok.
Programversion
redigeraDen här boken utgår från GameMaker: Studio 1.4 Standard edition. Programmet är gratis och en fullt fungerande version finns att ladda ned på Yoyogames hemsida.
Bokens pedagogik
redigeraMålet på sikt är att boken stegvis ska presentera olika funktioner eller delar av GML och därefter ge konkreta exempel på hur de kan användas. Dessutom ska här finnas självtester och uppgifter att jobba med. Bästa sättet att lära sig programmering är att göra själv och göra många misstag.
Steg 1 - Grundläggande
redigeraLåt oss börja med att kika på GML och hur språket fungerar i grunden.
Variabler, Arrays
redigeraDet finns två sorters variabler i GML.
- Reela tal
- Strängar
De deklareras på samma sätt.
/// Rubrik för hela koden
/*
Kommentera mycket!
Det underlättar när du senare kommer tillbaka
till ditt spel. Eller för någon annan som vill
fortsätta där du slutat.
*/
// Ett reellt tal
var v_ettTal = 23;
// Ett textmeddelande
var v_meddelande = "Hello world!";
Notera: Kommentera med // för en rad och /* Flera rader med kommentarer */. Variablerna inleds med v_ och varje rad avslutas med ett semikolon ;. Variabler kan bara skrivas med bokstäver och _ (understrykning) och innehålla 64 tecken. Det går bra att använda åäö i variabelnamnen.
var xx,yy;
xx = x - 32 +irandom(64);
yy = y - 32 +irandom(64);
instance_create(xx, yy, obj_blood);
Var funkar variablerna?
redigeraDet finns fyra olika sorters variabler.
- instance: Funkar bara inne i en instance
potions = 12;
life = 100;
name = "Jock MacSweeney";
strength = 5.5;
armour = -2;
- local: Endast inne i ett event eller skript. Efter koden körts har GM glömt bort variabeln.
var xx;
- global: Går att använda överallt. Mest resurskrävande!
globalvar food;
food = 5;
// Alternativt använd global. före
global.food = 5;
global.food += 1;
draw_text(32, 32, "food = " + string(global.food));
- built in variable: Inbyggd i rum eller objekt. En del av spelvärlden.
Arrays eller Vektorer
redigeraa[0] = "Hej"; // En dimension
a[1] = "Hello";
a[3] = "Guten tag";
array[0, 0] = 1; // Två-dimensionell array
array[0, 1] = 2;
Beräkna och manipulera
redigeraBeräkningar är på samma sätt som i många andra språk.
string(global.food)
redigeraGör om den globala funktionen food till en sträng.
with
redigeraPåverka alla instanser på skärmen av ett objekt.
Vilkor. If Else osv
redigeraSwitch
redigera{
switch (keyboard_key)
{
case vk_left:
case ord("A"):
x -= 4;
break;
case vk_right:
case ord("D"):
x += 4;
break;
case vk_up:
case ord("W"):
y -= 4;
break;
case vk_down:
case ord("S"):
y += 4;
break;
}
}
Loopar
redigeraRepeat
redigeravar i = 0;
repeat (10)
{
inventory[i] = 0;
i+=1;
}
Do
redigera{
do
{
x = random(room_width);
y = random(room_height);
}
until (place_free(x, y)); }
For
redigera{
var i;
for (i = 0; i < 10; i += 1)
{
draw_text(32, 32 + (i * 32), string(i) + ". "+ string(scr[i]));
}
}
While
redigera{
while (!place_free(x, y))
{
x = random(room_width);
y = random(room_height);
}
}
Continue, Break
redigeraI/O
redigeraSteg 2 - Inbyggda funktioner och variabler
redigeraDet finns ganska många förprogrammerade funktioner som snabbar upp vanliga moment i spelskapandet. Det är en av huvudorsakerna till att GM är så snabbt att utveckla med. Men då måste man ha koll på sina funktioner :) Det här är ett urval av de mest användbara.
mouse_x och mouse_y
redigeraGlobala variabler som talar om var datormusen befinner sig.
Catch the clown
redigeraSynopsis: En clown far runt på skärmen. När spelaren klickar på den fångas den och spelaren får poäng.
- Sätt inte objekt som ska röra på sig till solid. Det kan ställa till problem vid kollisioner.
- Ha ett objekt utan sprite för att styra saker i bakgrunden. Döpte den till obj_control och använde den till att starta bakgrundsmusiken och rita ut poängen.
- Det finns en variabel som heter direction som får en sprite att vända sig mot det håll den rör sig. Går att använda på move-event.
Namngivning
redigeraNär du namnger dina resurser och objekt använd små bokstäver och ett prefix före. Exempelvis spr_clown för en sprite med en clown. Det ökar läsbarheten, i synnerhet när du gör större spel.
- spr_ Sprites
- snd_ Sounds
- bck_ Background
- obj_ Objects
- rms_ Rooms
Shoot'em up part 1
redigera- Bildfiler med animeringar som slutar med _stripXX delas automatiskt upp när de importeras. Ex ett flygplan med tre bilder: flygplan_strip3.png
Variabler
redigera- Variabelnamn gör skillnad på stora och små bokstäver. Ex. skjut_nu inte samma som Skjut_Nu.
- För att få unika egna variabelnamn, inled med v_.
Några olika förutbestämda variabler vi kan använda i våra spel. Det finns många fler men det är några att börja experimentera med :-)
- x: the x coordinate of the instance
- y: the y coordinate of the instance
- hspeed: horizontal speed (in pixels per step)
- vspeed: vertical speed (in pixels per step)
- direction: current direction of motion in degrees, 0 being right, and going anticlockwise to 360 being right again
- speed: the current speed in this direction
- visible: whether the object is visible (1, or true) or invisible (0, or false)
- solid: whether the object is solid (1, or true) or not (0, or false)
And here are some global variables:
- score: the current value of the score
- lives: the current number of lives
- health: the current health of the player (defaults to 100)
- mouse_x: the x coordinate of the mouse
- mouse_y: the y coordinate of the mouse
- room_speed: current speed (FPS) of the room in steps per second
- room_caption: caption shown in the window title
- room_width: width of the room in pixels
- room_height: height of the room in pixels
Accessors
redigeraEtt snabbt sätt att plocka ut data från datastrukturer.
Planering
redigeraPrioriterade Spelprojekt
redigera- Klicka på clownen
- Masken
- Donkey kong
- Pong
- Tetris
- Frogs
- Pac-Man
- Shoot'em up
- Break out
Ytterligare Spelprojekt
redigera- Plattformsspel
- Dungeon crawler
- Monkey Island-likt äventyrsspel
- Angry Birds
- Farmville
- Brädspel som schack, fia med knuff
- Patienser som harpan
- RTS som Command and Conquer
- FPS - Doom mm.
- Tredjeperson, se sin gubbe snett uppifrån
Idé2: Fundera på hur spel kan anpassas till mobiler, läsplattor, desktop osv. Hur publicera dem till iPhone, Android osv.
Denna boksida är en s.k. stubb, alltså bara påbörjad. Hjälp Wikibooks genom att skriva mer! |