Перейти к основному содержанию

rooms


rooms

Автоматически переведённая страница

К сожалению, на полный ручной перевод у нас не хватает ресурсов.
Если вы увидели ошибку — отправьте пул-риквест с исправлениями (ссылка для редактирования в конце страницы).

Этот объект управляет вашими комнатами и текущим видом (камерой).

Методы и свойства

rooms.current

Объект текущей комнаты.

rooms.switch('НовоеИмяКомнаты')

Вызывает событие onleave последней посещенной комнаты и переходит в новую.

rooms.restart()

Вызывает событие onleave в этой комнате и перезапускает его.

rooms.clear()

Удаляет все существующие копии в комнате.

rooms.template

Словарь со всеми шаблонами комнат.

rooms.list['ИмяКомнаты']

Это объект, содержащий массивы комнат на текущей сцене, подобно templates.list. Они могут быть полезны, если у вас много элементов пользовательского интерфейса на экране и вам нужно управлять ими.

rooms.remove(room)

Этот метод безопасно удаляет ранее добавленный или вставленный room со сцены. Он активирует события "On Leave" для room и "On Destroy" для всех копий удаленного room. Room также будет иметь установленное значение this.kill в его событии, если это может быть полезно. Этот метод не может удалить rooms.current, основной room. Аргумент room должен быть ссылкой на ранее созданный room, например:

JavaScript
if (actions.TogglePause.released) {
  if (!this.pauseMenu) { // если параметр pauseMenu не установлен
    this.pauseMenu = rooms.append('UI_Pause'); // создать room и установить его в параметр pauseMenu
  } else {
    rooms.remove(this.pauseMenu);
  }
}

Как копия знает, что ее событие "On Destroy" активируется из удаленного room, а не основного? Каждая копия имеет метод getRoom(), и вы можете использовать его с свойством room.kill:

JavaScript
// Предположим, у нас есть модульный уровень, и некоторые куски должны загружаться/выгружаться динамически,
// а эта конкретная копия - бомба, которая не должна срабатывать, если ее кусок выгружен.
if (this.getRoom().kill) {
  return; // эффективно прерывает выполнение следующего кода
}
sounds.play('Explosion');
this.killEverythingNearby();

rooms.append('NameOfTheRoom', ext) и rooms.prepend('NameOfTheRoom', ext)

Добавляет новую комнату на текущую сцену и помещает ее выше или ниже всех копий в вашей комнате. С помощью этих методов вы можете повторно использовать интерфейс, фоны и эффекты окружающей среды. Обратите внимание, что эти слои будут иметь другой стек отрисовки, чем в вашей основной комнате, и не будут сортироваться вместе. Для такой поведения используйте вместо этого rooms.merge (см. ниже).

Параметр ext можно использовать для применения дополнительных параметров к новой комнате. Например, если вы вызовете rooms.append('Background', {color: 0x446ADB}), то комната "Background" будет иметь this.color в своих событиях "On Create" и других.

Для создания слоя интерфейса используйте этот код:

JavaScript
rooms.append('YourUiRoom', {
    isUi: true
});

rooms.merge('НазваниеКомнаты')

Этот метод объединяет все сущности указанной комнаты с текущей. Это полезно для префабов и процедурного генерирования. Обратите внимание, что события "On Create" и другие события комнаты не вызываются. Метод возвращает объект со свойствами copies, tileLayers и backgrounds. Вы можете пройти по ним, чтобы правильно расположить сущности, например:

JavaScript
var spawnX = 100;
var spawnY = 500;
var merged = rooms.merge('AssasinsSet');

// Предположим, нам не нужны фоновые изображения и слои плиток из него
for (const copy of merged.copies) {
    copy.xstart += spawnX;
    copy.x += spawnX;
    copy.ystart += spawnY;
    copy.y += spawnY;
}

Внимание:

Результат функции не обновляется и предназначен только для первоначальной настройки. Его не следует сохранять в качестве параметра объекта, чтобы избежать утечек памяти. Используйте ключевое слово var, как показано выше.