Phaser: уничтожение текста через фиксированное количество секунд

Я использую следующую функцию в Phaser для создания плавающих инструкций, которые исчезают через первые 5 секунд. Эта функция вызывается внутри функции create.

setupText: function () {
  this.instructions = this.add.text( 510, 600, 
    'Use Arrow Keys to Move, Press Z to Fire\nClicking does both', 
    {font: '20px monospace', fill: '#fff', align: 'center'}
  );
  this.instructions.anchor.setTo(0.5, 0.5);
  this.time.events.add(5000, this.instructions.destroy, this);
},

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

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

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

Поэтому я ищу помощь в том, как лучше всего это сделать, а также объяснение, почему мой код привел к остановке всей игры.


person Aakash Jain    schedule 05.09.2014    source источник


Ответы (1)


Проблема в том, что когда вы вызываете это:

this.time.events.add(5000, this.instructions.destroy, this);

Он вызывает функцию destroy для объекта this, который, вероятно, является вашей игрой.

Чтобы это исправить, вместо этого передайте this.instructions.

this.time.events.add(5000, this.instructions.destroy, this.instructions);
person parchment    schedule 05.09.2014
comment
Я вижу, это исправляет это. this действительно моя игра. Хотя мне любопытно, почему он должен вызывать destroy для this, когда вызываемая функция является членом this.instructions. - person Aakash Jain; 05.09.2014
comment
@aakashjain Javascript это сбивает с толку, см. эту статью. По сути, функция this.instructions.destroy не "привязана" к объекту this.instructions. Это просто функция, которая обычно имеет this значение this.instructions. - person parchment; 05.09.2014
comment
Благодарю за разъяснение. - person Aakash Jain; 05.09.2014