Прыгающие бомбы

Чтобы завершить нашу игру, нам осталось добавить несколько злодеев. Это придаст игре приятный элемент сложности, чего раньше не хватало. Идея такова: когда вы соберете все звезды в первый раз, вылетит прыгающая бомба. Бомба будет просто случайно прыгать по уровню, а если персонаж столкнется с ней, то он умрет. С появлением бомбы все звезды возродятся, так что вы сможете собрать их снова, и если вы их опять соберете все, то появится еще одна бомба. Это даст игроку задачу: набрать как можно больше очков, не умирая. Идея такова: когда вы собираете все звезды, невидимый плохой парень бросает прыгающую бомбу в вашего игрока. Эта бомба случайно подпрыгнет вокруг уровня и умрет, если персонаж столкнется с ним. С бомбой снова появляются звезды, так что их персонаж может собирать, и после их сбора, другая бомба выпускается со звездами. Игрок сталкивается с проблемой: набрать наибольшее количество очков до смерти. Первое, что нам нужно, это группа бомб и несколько коллайдеров:

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);

    }
}

Мы будем использовать метод объекта group countActive, чтобы увидеть, сколько у нас активных звезд. Если метод возвращает 0, это означает, что наш персонаж собрал все звезды, и мы используя метод итерации, включаем все звезды и устанавливаем их позицию y в ноль. Это заставит все звезды снова упасть с верхней части экрана.

Следующая часть кода создает бомбу. Сначала мы выбираем ей случайную координату х, чтобы она всегда находилась на противоположной стороне экрана от персонажа, просто чтобы дать ему шанс. Затем мы устанавливаем бомбу так, чтобы она сталкивалась с границами мира, подпрыгивала и имела произвольную скорость.

В результате получается бомба, которая скачет по экрану. Он достаточно мал, чтобы его было легко избежать в начале, но как только их число увеличится, это будет намного сложнее! И наша игра сделана :)

Заключение

Теперь вы научились создавать спрайт с физическими свойствами, управлять его движением и взаимодействовать с другими объектами в маленьком игровом мире. Однако есть много способов улучшить эту игру. Почему бы не расширить размер уровня и не позволить камере перемещаться за персонажем? Можно добавить разных типов врагов, другие ценные предметы или добавить игроку индикатор здоровья.

Если вам не нравится насилие, вы можете поменять тип игры на скоростное прохождение, где вы будете измерять время игрока на сбор всех звезд.

Благодаря тому, что вы узнали в этом курсе и сотен других доступных вам примеров, у вас должна быть прочная основа для других проектов. Если у вас есть вопросы, вам нужен совет или вы хотите поделиться тем, над чем вы работаете, перейдите на форум Phaser.

Моментальные игры Facebook

Phaser 3 полностью поддерживает создание моментальных игр Facebook. Теперь вы узнали, как создать игру Phaser, почему бы не посмотреть, как легко превратить ее в моментальную игру, в нашем специальном руководстве по началу работы.

Назад