Ще завършим играта си с добавянето на врагове. Това ще я направи и по-предизвикателна, което преди ѝ липсваше.
Идеята е следната: когато играчът събере всички звезди за пръв път, ще се появи една бомба, която случайно ще подскача из нивото и ще го убие, ако я докосне. Всичките звезди ще се появят отново и ако играчът пак ги събере, ще се появи още една бомба. Това служи като предизвикателство: събиране на възможно най-много точки без умиране.
Първо се нуждаем от група за бомбите и няколко обекта Collider:
bombs = this.physics.add.group();
this.physics.add.collider(bombs, platforms);
this.physics.add.collider(player, bombs, hitBomb, null, this);
Бомбите ще отскачат от платформите, а ако играчът докосне някоя, ще бъде изпълнена функцията hitBomb
. Тя ще спре играта и ще направи играча червен:
function hitBomb (player, bomb)
{
this.physics.pause();
player.setTint(0xff0000);
player.anims.play('turn');
gameOver = true;
}
За сега добре, но трябва и да създадем бомбите. За тази цел ще променим функцията 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);
}
}
Използваме метод на групата на име countActive
, за да проверим колко звезди остават. Ако няма такива, играчът е събрал всички и използваме функцията iterate
, за да съживим всички звезди и да променим позицията им по Y на 0. Това ще ги накара пак да паднат от горната част на екрана.
Следващата част от кода създава бомба. Първо избираме случайна координата по X, винаги от срещуположната половина на екрана спрямо играча, за да му дадем шанс. След това създаваме бомбата, караме я да отскача от границите на света и ѝ даваме случайна скорост.
Крайният резултат е малка бомба, която рикошира из екрана. Малка и лесна за отбягване в началото, но става по-трудно, когато се съберат много!
С това, играта ни е готова :)
Заключение
Вече можете да създадете спрайт с физични свойства, да контролирате движението му и да го накарате да си взаимодейства с други обекти в малък игрален свят. Има много неща, с които можете да подобрите това. Защо да не увеличите размера на нивото и да позволите на камерата да се движи? Можете да добавите различни видове врагове, събираеми предмети с различни стойности или да дадете на играча точки живот.
А за стил на игра без насилие, можете просто да предизвикате играча да събере звездите възможно най-бързо.
With the help of what you have learned in this tutorial and the hundreds of examples available to you, you should now have a solid foundation for a future project. But as always if you have questions, need advice or want to share what you've been working on then feel free to ask for help in the Phaser forum. С помощта на това, което научихте в този урок, и стотиците примери, които можете да използвате, вече трябва да имате добра основа за бъдещ проект. Ако имате въпроси, нужда от помощ или ако искате да сподели това, върху което работите, винаги можете да попитате във форума на Phaser.
Facebook Instant Games
Phaser 3 има пълна поддръжка за създаване на игри чрез платформата Facebook Instant Games. След като вече можете да създадете игра с Phaser, защо не видите колко е лесно да се възползвате от нея?