Phaser: как использовать простой таймер от 0 до 3 - PullRequest
0 голосов
/ 11 февраля 2019

Я использую следующий код (это упрощенный фрагмент кода, чтобы сделать его более читабельным) :

var player;
var box_tnt;

function create (){
    this.physics.add.collider(player, box_tnt, hitTnt, null, this);
}

//the function hitTnt stop the game because the player died
function hitTnt (player, boxes){
    this.physics.pause();
    player.setTint(0xff0000);
    player.anims.play('default');
    gameOver = true;
    textGameOver.setText('GAME OVER');
}
  • Фактический состав:

Когда игрок ударил бомбу: игрок умирает;конец игры

  • Желаемый состав:

Когда игрок попадает в бомбу: бомба ждет 3 секунды, а затем взрывается!Если игрок слишком близко, он умирает.Но я очень стараюсь использовать таймер даже после прочтения множества примеров на форуме.Я новичок в отношении Фазера, поэтому пока мне это не удалось.

Буду признателен за любую помощь, заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Предполагая, что вы используете Phaser 3, вы можете использовать таймер следующим образом.

  1. Метод delayedCall, который короче.

delayedCall(delay, callback, args, callbackScope)

Итак, вы бы сделали что-то вроде этого.

this.time.delayedCall(2000, onEvent, null, this);

метод addEvent

addEvent(config) Документы для конфигурации

this.time.addEvent({ delay: 2000, callback: onEvent, callbackScope: this });

Найдите эти методы в документах здесь .

Найти примеры для событий таймера здесь .


Другая вещь, которую вы можете сделать, это если у вас есть какая-нибудь анимация, которая играет в течение 3 секунд(Если вы делаете анимацию в течение 3 секунд).Вы можете прикрепить onComplete обратный вызов к нему.Таким образом, после того, как Tween завершится, будет выполнен onComplete обратный вызов.

0 голосов
/ 11 февраля 2019

Если вы хотите отложить выполнение логики hitTnt() на 3 секунды, вы можете заключить его в вызов setTimeout() следующим образом:

function hitTnt(player, boxes) {
    setTimeout(() => {
        this.physics.pause();
        player.setTint(0xff0000);
        player.anims.play('default');
        gameOver = true;
        textGameOver.setText('GAME OVER');
    }, 3000);
}
...