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, например:
if (actions.TogglePause.released) {
if (!this.pauseMenu) { // если параметр pauseMenu не установлен
this.pauseMenu = rooms.append('UI_Pause'); // создать room и установить его в параметр pauseMenu
} else {
rooms.remove(this.pauseMenu);
}
}
if actions.TogglePause.released
if not @pauseMenu # если параметр pauseMenu не установлен
@pauseMenu = rooms.append 'UI_Pause'
# создать room и установить его в параметр pauseMenu
else
rooms.remove @pauseMenu
Как копия знает, что ее событие "On Destroy" активируется из удаленного room, а не основного? Каждая копия имеет метод getRoom()
, и вы можете использовать его с свойством room.kill
:
// Предположим, у нас есть модульный уровень, и некоторые куски должны загружаться/выгружаться динамически,
// а эта конкретная копия - бомба, которая не должна срабатывать, если ее кусок выгружен.
if (this.getRoom().kill) {
return; // эффективно прерывает выполнение следующего кода
}
sounds.play('Explosion');
this.killEverythingNearby();
# Предположим, у нас есть модульный уровень, и некоторые куски должны загружаться/выгружаться динамически,
# а эта конкретная копия - бомба, которая не должна срабатывать, если ее кусок выгружен.
if @getRoom().kill
return # эффективно прерывает выполнение следующего кода
sounds.play 'Explosion'
@killEverythingNearby()
rooms.append('NameOfTheRoom', ext)
и rooms.prepend('NameOfTheRoom', ext)
Добавляет новую комнату на текущую сцену и помещает ее выше или ниже всех копий в вашей комнате. С помощью этих методов вы можете повторно использовать интерфейс, фоны и эффекты окружающей среды. Обратите внимание, что эти слои будут иметь другой стек отрисовки, чем в вашей основной комнате, и не будут сортироваться вместе. Для такой поведения используйте вместо этого rooms.merge
(см. ниже).
Параметр ext
можно использовать для применения дополнительных параметров к новой комнате. Например, если вы вызовете rooms.append('Background', {color: 0x446ADB})
, то комната "Background" будет иметь this.color
в своих событиях "On Create" и других.
Для создания слоя интерфейса используйте этот код:
rooms.append('YourUiRoom', {
isUi: true
});
roomSettings = {
isUi: true
}
rooms.append 'YourUiRoom', roomSettings
rooms.merge('НазваниеКомнаты')
Этот метод объединяет все сущности указанной комнаты с текущей. Это полезно для префабов и процедурного генерирования. Обратите внимание, что события "On Create" и другие события комнаты не вызываются. Метод возвращает объект со свойствами copies
, tileLayers
и backgrounds
. Вы можете пройти по ним, чтобы правильно расположить сущности, например:
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;
}
spawnX = 100
spawnY = 500
merged = rooms.merge 'AssasinsSet'
# Предположим, нам не нужны фоновые изображения и слои плиток из него
for copy in merged.copies
copy.xstart += spawnX
copy.x += spawnX
copy.ystart += spawnY
copy.y += spawnY
Внимание:
Результат функции не обновляется и предназначен только для первоначальной настройки. Его не следует сохранять в качестве параметра объекта, чтобы избежать утечек памяти. Используйте ключевое слово var
, как показано выше.