For at f├Ñ rundet vores spil af, er det nu p├Ñ tide at tilf├©je nogle modstandere. Det vil give et element af udfordring til spillet, som det hidtil har manglet.
Ideen er som f├©lger: F├©rste gang man indsamler alle stjernerne udl├©ser det en deflekterende bombe. Bomben bev├ªger sig vilk├Ñrligt rundt p├Ñ banen og deflekteres fra v├ªgge og platforme. Hvis man st├©der ind i den, d├©r man. Alle stjernerne genskabes ogs├Ñ, s├Ñ man kan indsamle dem igen, og hvis man g├©r det, udl├©ses endnu en bombe. Det vil skabe en udfordring for spilleren: F├Ñ s├Ñ h├©j en score som muligt uden at d├©.
Det f├©rste vi har brug for er en gruppe til bomberne og et par Collider-objekter:
bombs = this.physics.add.group();
this.physics.add.collider(bombs, platforms);
this.physics.add.collider(player, bombs, hitBomb, null, this);
Bomberne deflekterer p├Ñ platformene, og hvis spilleren rammer dem kalder vi funktionen hitBomb. Det eneste den g├©r, er at stoppe spillet og farve spilleren r├©d:
function hitBomb (player, bomb)
{
this.physics.pause();
player.setTint(0xff0000);
player.anims.play('turn');
gameOver = true;
}
S├Ñ langt, s├Ñ godt - men vi skal jo udl├©se en bombe. Til det form├Ñl ├ªndrer vi lidt i funktionen collectStar:
function collectStar (player, star)
{
star.disableBody(true, true);
score += 10;
scoreText.setText('Score: ' + score);
if (stars.countActive(true) === 0)
{
stars.children.iterate(function (child) {
child.enableBody(true, child.x, 0, true, true);
});
var x = (player.x < 400) ? Phaser.Math.Between(400, 800) : Phaser.Math.Between(0, 400);
var bomb = bombs.create(x, 16, 'bomb');
bomb.setBounce(1);
bomb.setCollideWorldBounds(true);
bomb.setVelocity(Phaser.Math.Between(-200, 200), 20);
}
}
Vi bruger metoden countActive fra Group-objektet til at se hvor mange stjerner, der stadig er i live. Hvis det er nul, har spilleren indsamlet dem alle, og så bruger vi funktionen iterate til at genaktivere alle stjernerne og sætte deres y-position tilbage til 0. Det får dem alle til at falde ned fra toppen af skærmen igen.
Den n├ªste del af koden skaber en bombe. F├©rst v├ªlger vi et tilf├ªldigt x-koordinat, altid i modsatte side af sk├ªrmen i forhold til spilleren, bare for at give ham en chance. S├Ñ skabes bomben, den indstilles til at kunne kollidere med verdnen, deflektere via bounce-v├ªrdien og til at have en tilf├ªldig hastighed.
Slutresultatet er en fin lille bombesprite der deflekteres omkring p├Ñ sk├ªrmen. Lille nok til at den i f├©rste omgang er let at undg├Ñ, men n├Ñr der f├©rst kommer flere af dem, bliver det en hel del sv├ªrere!

Og vores spil er færdigt :)
Konklusion
Du har nu l├ªrt hvordan man skaber en sprite med fysikegenskaber, at styre dens bev├ªgelser og f├Ñ den til at interagere med andre objekter i en lille spilverden. Der er masser af andre ting du kan g├©re for at bygge videre p├Ñ dette. Hvorfor ikke g├©re banen st├©rre og lade kameraet bev├ªge sig? M├Ñske tilf├©je nye typer af modstandere, nye ting man kan samle op for at f├Ñ points, eller giv spilleren en helbredsbj├ªlke.
Eller, hvis du ├©nsker et ikke-voldeligt spil, s├Ñ kan du g├©re det til en tidsudfordring at lade spilleren indsamle stjernerne s├Ñ hurtigt som muligt.
Med det, som du har l├ªrt i denne tutorial, og de hundredevis af andre frit tilg├ªngelige eksempler, har du f├Ñet et solidt fundament for fremtidige projekter. Men, som altid: Hvis du har sp├©rgsm├Ñl, brug for gode r├Ñd eller ├©nsker at dele det, som du har arbejdet p├Ñ, s├Ñ bed endelig om hj├ªlp i Phasers forum.
Facebook Instant Games
Phaser 3 underst├©tter til fulde udvikling af Facebook Instant Games. Nu hvor du har l├ªrt at lave et Phaserspil, hvorfor s├Ñ ikke se, hvor let det er at konvertere det til et Instant Game i vores dedikerede Getting Started Guide.