I dette skriv vil jeg først opridse den helt basale opsætning af tyngdekraft i spilverdener, og bagefter vil jeg fortælle om et par teknikker som kan bruges til at justere og personliggøre, hvordan du bruger tyngdekraft i dit spil.
God læsning inden du starter
- Koordinater, hvad er det? Hvordan GameMakers koordinatsystem fungerer i forhold til placeringer og flytten rundt.
Hvordan laver vi tyngdekraft
Om vi snakker GameMaker eller andre udviklingsværktøjer - 2D eller 3D - er grundprincipperne bag tyngdekraft i spil typisk de samme: En karakter eller genstand skal bevæge sig hurtigere og hurtigere nedad jo længere tid karakteren eller genstanden falder. Så for at give en karakter i vores spil tyngdekraft, skal vi holde styr på tre ting:
-
Karakterens nuværende placering på Y-aksen. I GameMaker er dette den indbyggede variabel
y
, som altid bruges til at bestemme et objekts placering. I drag and drop kany
-variablen ændres med "Jump To Point" kodeblokken. -
Karakterens nuværende, vertikale hastighed. Hvis man bruger GameMakers indbyggede variabler og bevægelsessystem, er dette hvad variablen
vspeed
sørger for. Man kan sætte denne med "Set Speed" kodeblokken. -
Selve tyngdekraften, altså hvor meget der skal lægges til den vertikale hastighed hvert trin i spillet. Det kan GameMaker gøre med variablen
gravity
, hvis man bruger deres indbyggede variabler og bevægelsessystem. Man kan sættegravity
med "Set Gravity Force" kodeblokken.
Selvom GameMaker har indbyggede variabler, som ofte giver god mening at bruge, kan jeg godt lide ikke at bruge de indbyggede bevægelsessystemer, da vi ikke har så meget kontrol over dem. Så lad os i stedet sætte noget tyngdekraft op selv (men i bund og grund er det det samme, som GameMaker gør skjult i baggrunden, når man bruger gravity
variablen). Det, vi gerne vil gøre, er i bund og grund følgende:
Læg din tyngdekraft til din vertikale hastighed, og læg så din vertikale hastighed til din placering.
Lav din egen tyngdekraft:
Først skal vi definere vores variabler. GameMakers indbyggede y
-variabel kommer vi ikke udenom at bruge, men lad os definere vspd
i stedet for GameMakers vspeed
, og grav
i stedet for GameMakers gravity
. Dette skal gøres én gang, typisk i en Create
-event.
Vores variabler gør ikke noget i sig selv, men de er vigtige for at opnå vores mål. I en Step
-event kan vi så få magien til at ske. Det gør vi ved først at tilføje vores grav
til vores vspd
(derfor skal "relative" være markeret i kodeblokken). Det er dette der gør, at vores karakter vil falde hurtigere og hurtigere, og ikke bare med en fast hastighed. Derefter skal vi så tilføje vores vspd
til vores y
for at flytte vores karakter.
Og det er egentlig grundprincipperne bag tyngdekraft. Vores spiller vil nu falde hurtigere og hurtigere jo længere tid de er i luften. Et spil har selvfølgelig typisk noget, som stopper faldet. Det kan helt simpelt være en Y-placering, som stopper spilleren, ligesom jeg har skrevet om i dette indlæg (jeg bruger den teknik i mit "Flappy Bird"-inspirerede spil), eller måske oftere skal vi bruge et kollisionssystem ligesom i mit skriv Flyt en figur til den rammer en mur. Ofte vil man også begrænse karakterernes hastigheder, så de ikke bevæger sig alt for hurtigt.
Udvidelser til formularen - tips og tricks
Når først grundformularen er på plads, kan vi begynde at lave variationer af den, for at tilpasse den vores spils gameplay, eller tilføje til det. Der er mange teknikker, vi kan anvende, og følgende er kun et fåtal af måder, hvorpå vi kan tilpasse tyngdekraften i vores spil.
Adskilt tyngdekraft op og ned
I rigtig mange spil, er tyngdekraften konstant. Men vi kan få meget ud af at adskille tyngdekraften, så den er forskellig, alt efter om en karakter bevæger sig opad eller nedad.
Når vi får en spillerkarakter til at hoppe, er det ofte for at komme hurtigt opad, så det kan give god mening at give hoppet en stor kraft, som så kan modvirkes med en høj tyngdekraft, så karakteren ikke hopper for højt. Når karakteren så falder ned igen, kan det være fordelagtigt at skrue ned for tyngdekraften, så vi nemmere kan lande der, hvor vi gerne vil lande. En simpel form af sådan noget kode kunne se sådan her ud:
Skiftende tyngdekraft
Lidt i samme stil som den adskilte tyngdekraft, kan vi også bruge forskellige tyngdekræfter som et element i vores spil. Det er gjort mange gange før og kan gøres på et utal af måder. Her er et par eksempler fra forskellige spil.
Faldskærm
Mange spil bruger parasoller, faldskærme, eller simpelthen oppustethed til at lade spilleren falde meget langsom. Her er et billede af det lidt gamle spil Tombi!, et af mine yndlingsspil, hvor man har mulighed for at tage en "funky parasol" på, netop til det formål:
Ligesom jeg beskrev med den adskilte tyngdekraft, kan den her slags mekanismer hjælpe spilleren med at have mere kontrol når de hopper fra platform til platform. Men man kan også gøre det til en ulempe i visse situationer. For eksempel har Tombi! nogle vindfyldte baner, hvor man bliver blæst hurtigere væk, hvis man har parasollen på.
Vend det hele på hovedet ...
... eller mod venstre, eller højre. En god håndfuld spil tillader spilleren af "flippe" eller rotere tyngdekraften. Senest har jeg set det blive gjort i Crash Bandicoot 4, hvor man gør det i bestemte sektioner af spillet, ved at bruge en magisk maske:
Der kan være mange måder at gøre det på. Det kan være spillerens egen tyngdekraft der vendes på hovedet, som i Crash Bandicoot - men det kan også være hele verdens tyngdekraft, eller fjendernes.
Første trin for dette, er selvfølgelig at vende tyngdekraften om, hvilket vi nemt kan gøre ved at sætte grav
til et negativt tal. Men man skal også huske på ting, som at sørge for at kollisioner med loftet stadig virker, at vende spillerkarakteren grafik på hovedet, og at karakterens hop også lige pludselig skal gå den modsatte vej.
Noget der fører dig opad eller nedad
Vind eller andre kræfter kan også bruges til at variere tyngdekraften. I Rayman Origins og Rayman Legends bruges opad- og nedadgående vind for eksempel til at skrue op eller ned for tyngdekraften:
Når Rayman hopper i en opadgående vind, kan han hoppe højere end normalt. Modsat hopper han ikke særlig højt, når vinden går nedad. I skærmbilledet bruger Rayman også sit hår som en propel, hvilket fungerer meget ligesom parasollen i Tombi: Rayman falder meget langsommere, når han gør dette, og kan endda svæve ind i opadgående vind for at flyve opad.
Husk dog altid at gøre det tydeligt, hvad der ændrer på tyngdekraften. Læg mærke til at vinden i Rayman nærmest ikke er til at overse, fordi den er så tydeliggjort, både i dens opstregninger og partikeleffekter.
Coyote time
Når en spiller skal hoppe henover et stort hul, kan de nemt føle sig snydt, hvis de lige præcis ikke når at hoppe i tide, og derfor falder i hullet - for ofte vil de føle, at de faktisk hoppede i tide. Derfor gør langt de fleste platformer spil det, at de tillader spilleren at hoppe et lille stykke ude i luften, for at give spilleren en ekstra chance. I samme vending, kan det give mening at vente et splitsekund med at slå tyngdekraften til, når en spiller løber udover en kant. "Coyote time" er opkaldt efter Looney Toons "Wile E. Coyote", prærieulven der altid løber efter Hjulben, og nogle gange bliver snydt til at løbe udover en klippe, hvor han så hænger lidt i luften, før han falder.
Jeg ynder at lave coyote time i mine spil, men i mit game jam spil Sam & Daisy Go Hide & Seek nåede jeg det for eksempel ikke, hvilket gjorde at en del af dem der spillede det, havde svært ved at klare nogle af hoppene i spillet.
Og mens vi er ved Looney Toons ...