GameMaker - Studio

Från Wikibooks
Wikipedia
Wikipedia
Svenskspråkiga Wikipedia har en artikel om detta ämne:

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[redigera]

Den 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[redigera]

Må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[redigera]

Låt oss börja med att kika på GML och hur språket fungerar i grunden.

Variabler, Arrays[redigera]

Det 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?[redigera]

Det 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[redigera]

a[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[redigera]

Beräkningar är på samma sätt som i många andra språk.

string(global.food)[redigera]

Gör om den globala funktionen food till en sträng.

with[redigera]

Påverka alla instanser på skärmen av ett objekt.

Vilkor. If Else osv[redigera]

Switch[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[redigera]

Repeat[redigera]

var 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[redigera]

I/O[redigera]

Steg 2 - Inbyggda funktioner och variabler[redigera]

Det 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[redigera]

Globala variabler som talar om var datormusen befinner sig.

Catch the clown[redigera]

Synopsis: 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[redigera]

Nä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[redigera]

Ett snabbt sätt att plocka ut data från datastrukturer.

Planering[redigera]

Prioriterade 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.