Det er p├Ñ tide at give vores lille spil et m├Ñl. Lad os drysse en h├Ñndfuld stjerner ned over scenen og give spilleren evnen til at indsamle dem. For at opn├Ñ dette skaber vi en gruppe kaldet 'stars' og fylder den med nogle objekter. I vores create-funktion tilf├©jer vi den f├©lgende kodestump (dette kan ses i part8.html):
stars = this.physics.add.group({
key: 'star',
repeat: 11,
setXY: { x: 12, y: 0, stepX: 70 }
});
stars.children.iterate(function (child) {
child.setBounceY(Phaser.Math.FloatBetween(0.4, 0.8));
});
Fremgangsmåden er den samme som da vi skabte platformsgruppen. Men da stjernerne skal kunne bevæge sig, skaber vi en dynamisk fysikgruppe i stedet for en statisk.
Group-objekter kan modtage konfigurationsobjekter til at hj├ªlpe med deres ops├ªtning. I dette tilf├ªlde har gruppens konfigurationsobjekt tre dele: F├©rst s├ªttes teksturen til at v├ªre billedet af en stjerne. Det betyder at alle objekter, der skabes via konfigurationsobjektet automatisk vil f├Ñ stjernen som tekstur. S├Ñ s├ªttes v├ªrdien af 'repeat' til 11. Fordi der automatisk skabes 1 medlemsobjekt af gruppen, betyder de 11 gentagelser at vi f├Ñr 12 i alt, hvilket er pr├ªcis hvad vi beh├©ver til spillet.
Den sidste del er setXY - dette bruges til at s├ªtte positionen af de 12 medlemmer som gruppen skaber. Hvert medlem placeres begyndende ved x: 12, y: 0 og med et skridt p├Ñ 70 pixels i x-retningen imellem sig. Det betyder at det f├©rste medlem vil blive placeret p├Ñ 12 x 0, den n├ªste er 70 pixels fra denne p├Ñ 82 x 0, den tredje er p├Ñ 152 x 0, osv. V├ªrdierne for 'step' er en virkelig nem m├Ñde at sprede medlemmerne i en gruppe fra hinanden, imens de bliver skabt. V├ªrdien p├Ñ 70 er valgt her fordi alle 12 medlemmer s├Ñ bliver j├ªvnt fordelt p├Ñ sk├ªrmen.
Den n├ªste kodestump genneml├©ber alle medlemmer af gruppen og giver dem en tilf├ªldig v├ªrdi mellem 0.4 og 0.8 for Y bounce. Bounce kan v├ªre imellem 0, hvilket betyder ingen deflektion, og 1, fuld deflektion. Da alle stjernerne skabes p├Ñ position 0 ad y-aksen, vil tyngdekraften tr├ªkke dem ned indtil de kolliderer med platformene eller jorden. Bounce-v├ªrdierne betyder at de hopper lidt vilk├Ñrligt op og ned igen, indtil de st├Ñr helt stille.
Hvis vi k├©rer koden som den st├Ñr nu, vil stjernerne falde igennem bunden af spillet og ud af syne. For at standse dem m├Ñ vi checke for kollisioner med platformene. Det kan vi g├©re med et nyt Collider-objekt:
this.physics.add.collider(stars, platforms);
Derudover skal vi også checke om spilleren overlapper med en stjerne eller ej:
this.physics.add.overlap(player, stars, collectStar, null, this);
Det beder Phaser om at checke for overlap mellem spilleren og alle stjernerne i gruppen 'stars'. Hvis der opstår et overlap, medsendes den pågældende stjerne til funktionen 'collectStar':
function collectStar (player, star)
{
star.disableBody(true, true);
}
P├Ñ simpel vis bliver stjernens fysiklegeme deaktiveret og dets spilobjektet g├©res inaktivt og usynligt, hvilket fjerner det fra sk├ªrmen. Hvis vi nu k├©rer spillet, har vi en spiller der kan springe fra platform til platform og opsamle stjernerne, der falder ned fra oven. Ikke d├Ñrligt for nogle f├Ñ linjers kode, som forh├Ñbentligt mestendels er temmelig letl├ªselig :)
