Navigation

Del 6 - Legemets hastighed: Fysikkens Verden

Phaser understøtter en række forskellige fysiksystemer, der hver især er et plugin som er tilgængeligt for enhver Phaser Scene. På nuværende tidspunkt understøttes Arcade Physics, Impact Physics og Matter.js Physics. I denne tutorial benytter vi Arcade Physics til vores spil, da det er enkelt og letvægts, perfekt til mobile browsere.

Når en Physics Sprite skabes, får den egenskaben body, som er en reference til dens Arcade Physics Body. Denne repræsenterer spriten som et fysisk legeme i regi af Phasers Arcade Physics engine. Legemet har en masse egenskaber, som vi kan lege med.

For eksempel er det at simulere effekten af tyngdekraft på legemet så enkelt som at skrive:

player.body.setGravityY(300)

Dette er en vilkårlig værdi, men logisk nok vil legemet føles tungere og falde hurtigere, jo højere vi sætter værdien. Hvis du føjer denne linje til din egen kode eller kører part5.html i en browser, vil du se at spilleren falder ned uden at stoppe og fuldstændig ignorerer jorden, som vi skabte tidligere:

image

Grunden til dette er at vi endnu ikke checker for kollisioner mellem jorden og spilleren.

Vi har allerede fortalt Phaser at jorden og platformene skal være statiske legemer. Havde vi ikke gjort det, men skabt dynamiske i stedet, så ville kollisioner mellem spilleren og dem betyde en kort opbremsning hvorefter alt brasede sammen. Så ville jorden være et bevægeligt fysiklegeme, og ved kollision ville spillerens hastighed overføres delvist til det, hvorved også jorden ville begynde at falde ned.

For at lade spilleren kollidere med platformene kan vi skabe et Collider objekt. Dette objekt overvåger to fysikobjekter (hvilket kan inkludere grupper) og checker for kollisioner eller overlap imellem dem. Hvis sådanne forekommer, kan man eventuelt vælge at kalde sin egen callback-funktion, men det behøver vi ikke her, hvor det bare handler om at kollidere med platforme:

this.physics.add.collider(player, platforms);

Det er Collider-objektet, der udfører magien. Det tager to objekter, tester for kollision og skiller dem ad igen. I dette tilfælde giver vi det spillerens sprite og platforms-gruppen. Det er snedigt nok til at teste for kollision mellem spilleren og alle gruppens medlemmer, så med dette ene kald checkes for kollision med jorden og alle platformene. Resultatet er statiske platform, der ikke braser sammen.

image