Vi har lige føjet en masse kode til vores create
-funktion. Det fortjener en mere detaljeret forklaring. Først denne del:
platforms = this.physics.add.staticGroup();
Her skabes en ny Static Physics Group (en gruppe af statiske fysikobjekter), som gemmes i den lokale variabel platforms
. I Arcade Physics, fysisksystemet til arkadespil, findes to typer af fysiske legemer: Dynamiske og statiske. Et dynamisk legeme er ét, der kan bevæge sig omkring som følge af fysiske kræfters påvirkning og fx kan have hastighed og accelleration. Det kan ændre retning i kollision med andre objekter, og kollisionerne påvirkes af legemernes masse og øvrige egenskaber.
Stik modsat af dette har et statisk legeme blot en position og en størrelse. Det påvirkes ikke af tyngdekraft, man kan ikke sætte en hastighed for det, og når noget støder ind i det, bevæger det sig aldrig. Statisk af navn, statisk af væsen. Og perfekt til jorden og de platforme, som vi vil lade spilleren løbe rundt på.
Men hvad er en gruppe? Som navnet antyder er grupper en måde at gruppere ensartede objekter og styre dem alle som en samlet enhed. Man kan også checke for kollisioner mellem grupper og andre spilobjekter. Grupper kan skabe deres egne spilobjekter via smarte hjælpefunktioner som create
. En gruppe af fysikobjekter vil automatisk skabe objekter med fysiske egenskaber, hvilket sparer os for noget af benarbejdet i den sammenhæng.
Med vores platforms-gruppe oprettet, kan vi nu bruge den til at skabe platformene:
platforms.create(400, 568, 'ground').setScale(2).refreshBody();
platforms.create(600, 400, 'ground');
platforms.create(50, 250, 'ground');
platforms.create(750, 220, 'ground');
Som vi tidligere har set, skaber det denne scene:
I vores preload-funktion indlæste vi et billede der hed 'ground'. Det er et simpelt grønt rektangel på 400 x 32 pixels som opfylder vores behov for nogle enkle platforme:
Den første linje kode ovenfor tilføjer et nyt ´ground´-billede på positionen 400 x 568 (husk at billeder placeres ud fra deres centerpunkt) - problemet er bare, at denne platform bør strække sig i hele spillets bredde, ellers falder spilleren bare ud over dens kanter. For at opnå dette forstørrer vi den x2 med funktionen setScale(2)
. Nu er den 800 x 64 i størrelsen, hvilket er perfekt til vores formål. Kaldet til refreshBody()
er nødvendigt fordi vi har skaleret et statisk fysiklegeme og er nødt til at fortælle fysikobjektet om de ændringer, vi har foretaget.
Jorden er skaleret og korrekt placeret, så det er tid til at tilføje de andre platforme:
platforms.create(600, 400, 'ground');
platforms.create(50, 250, 'ground');
platforms.create(750, 220, 'ground');
Fremgangsmåden er præcis som før, blot behøver vi ikke forstørre disse platforme, da de allerede har den rette størrelse.
Tre platforme er nu placeret rundt omkring på skærmen med den rette afstand imellem sig til at spilleren kan hoppe op på dem.
Så lad os tilføje vores spiller.