Что мешает моему коду столкновения работать в Phaser JS?

Я впервые работаю с игровым фреймворком Phaser JS. Я пытаюсь определить, когда два спрайта перекрываются или сталкиваются. Вот как я пытаюсь это сделать:

В функции обновления:

update: function() {
    this.game.physics.collide(this.player1, this.player2, this.CollisionD, null, this); 
    this.game.physics.overlap(this.player1, this.player2, this.OverlapD, null, this);
}

Затем в моей функции CollisionD, которая является моим обработчиком столкновений, я пробовал:

function CollisionD(obj1, obj2) {
    alert('collision!');
}

И я попытался:

function CollisionD(player1, player2) {
    alert('collision!');
}

То же самое касается моего обнаружения перекрытия. Что я делаю не так? В консоли также нет сообщений об ошибках.


person Brandon    schedule 12.03.2014    source источник
comment
какая у вас версия фазера?   -  person MamaWalter    schedule 13.03.2014
comment
а если попробовать без параметров? кстати завтра выйдет Phaser 2.0 и менеджер физики сильно изменится.   -  person MamaWalter    schedule 13.03.2014
comment
Если попробую без параметров, то же самое. Ничего не произошло. Может быть, мои спрайты не считаются перекрывающимися или сталкивающимися? Тем не менее, одна группа спрайтов идет прямо над основным спрайтом (главным персонажем). Враги приходят и накладываются и проходят мимо моего главного героя.   -  person Brandon    schedule 13.03.2014
comment
ты масштабировал свои спрайты?   -  person MamaWalter    schedule 13.03.2014
comment
Вы уверены, что функция CollisionD находится внутри игры?   -  person delueg    schedule 20.06.2014


Ответы (1)


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

if(this.game.physics.overlap(this.player1, this.player2))
    overlapD(this.player1, this.player2);

Конечно, это занимает еще одну строку, но избавляет от проблем с неработающим кодом, верно?

person 2016rshah    schedule 26.07.2014