понедельник, 7 августа 2017 г.

Спрайт с группой

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

var ship;
var group;
function create() {
  game.physics.startSystem(Phaser.Physics.ARCADE);
  ship = game.add.sprite(10, 10, ship);
  game.physics.enable(ship, Phaser.Physics.ARCADE);
  group = game.add.group();
  group.enableBody = true;
  group.physicsBodyType = Phaser.Physics.ARCADE;
  for (var i = 0; i < 50; i++)
  {
    var mine = group.create(
    game.rnd.integerInRange(20, 780),
    game.rnd.integerInRange(20, 580), 'mine');
  }
  ship.body.velocity.x = 20;
  ship.body.velocity.y = 20;
}
function update() {
  game.physics.arcade.collide(ship, group, collisionHandler, null, this);
}
function collisionHandler (player, mine) {
  player.kill();
}

  Главное изменение здесь - это создание группы и подключение всех физических тел через group.enableBody и group.physicsBodyType. Так мы создадим тела для всех спрайтов группы без необходимости прохождения через каждый спрайт и вызовем game.physics.enable для создания тела. В противном случае функция обновления должна выглядеть очень похоже, однако теперь второй аргумент функции collide будет группой вместо одиночного спрайта. Эта функция проверит столкновения между игроком и любой из мин, запуская обработчик столкновений для каждого найденного столкновения (хотя в данном случае после первого столкновения игрок будет мертв, так что следующие столкновения происходить не будут).


Комментариев нет:

Отправить комментарий

Экспорт из PhysicEditor   Когда все фигуры удовлетворяют вашему вкусу и вы готовы перенести работу в Phaser, необходимо экспортировать д...