Звёздная пыль

Пришло время дать нашей маленькой игре цель. Давайте разбросаем по сцене множество звезд, которые будет собирать наш персонаж. Чтобы достичь этого, мы создадим новую группу под названием «stars» и заполним ее. Для этого в функцию create добавим следующий код (его можно найти в файле 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));

});

Процедура аналогична созданию группы платформ. Поскольку нам нужно, чтобы звезды падали сверху и отскакивали от земли, мы создаем группу динамических физических тел, а не статических.

При создании группы вы можете использовать объект конфигурации для настройки группы. В нашем случае объект конфигурации состоит из трех частей: во-первых, мы устанавливаем ключ текстуры на изображение звезды. Таким образом, все дочерние элементы, созданные с помощью этого объекта конфигурации, будут иметь по умолчанию текстуру звезды. Затем мы устанавливаем свойство repeat в 11. Поскольку 1 дочерний элемент создается автоматически, 11 повторений означают, что в общей сложности мы получим 12 дочерних элементов.

Последний параметр setXY используется, чтобы установить положение 12 потомков группы. Каждый дочерний элемент будет размещен начиная с x: 12, y: 0 через интервал в 70 пикселей. Это означает, что первый дочерний элемент будет расположен в координатах (12;0), второй через 70 пикселей - (82;0), третий - в (152;0) и так далее. Использование значения step - это действительно удобный способ расположения дочерних элементов групп при их создании. Значение 70 было выбрано для идеального распределения всех 12 потомков на экране.

Следующий фрагмент кода проходит через все дочерние элементы в группе и устанавливает им случайное значение свойства отскока по Y в диапазоне от 0,4 до 0,8. Значения для отскока могут варьироваться от 0, тогда отскока вообще не будет, до 1, и тогда будет максимальный отскок. Поскольку звезды создаются со значением 0 для позиции y, гравитация притягивает их вниз, пока они, наконец, не отскочат от платформы или земли. Случайное значение отскока определяет на какую высоту будут отскакивать звезды пока окончательно не успокоятся.

Если мы запустим наш код сейчас, звезды будут падать и проходить сквозь платформы и землю, и скроются из виду. Чтобы предотвратить это, мы должны проверить их столкновение с платформами. Мы можем использовать другой объект Collider для этого:

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

Помимо этого, мы также проверим, не пересекается ли игрок со звездой:

this.physics.add.overlap(player, stars, collectStar, null, this);

Этот метод проверяет пересечение между персонажем и любой звездой в группе. Если определяется такое наложение, то вызывается функция collectStar:

function collectStar (player, star)
{
    star.disableBody(true, true);
}

В этой функции у звезды отключается физическое тело, а ее родительский игровой объект становится неактивным и невидимым, что убирает звезду с экрана. Если мы начнем игру сейчас, персонаж сможет бегать, прыгать, отскакивать от платформ и собирать падающие сверху звезды. Неплохо для нескольких строк относительно читабельного кода :)

Назад       Далее