GameMaker Studio 2: Настройка слоев для постоянных объектов
Game Maker Studio 2 (текущая версия v2.2.1 и старше) не устанавливает автоматически слои для постоянных объектов при смене комнаты. Это означает, что постоянные объекты больше не имеют установленного слоя, если они переходят в другую комнату. Если вы хотите получить идентификатор слоя/глубину/имя объекта в другой комнате, он просто возвращает -1
. Фу!
Есть несколько обходных путей для этого, в зависимости от того, что вам нужно. Вы можете либо установить слой постоянного объекта на слой в новой комнате с той же глубиной, что и в предыдущей, либо вы можете найти слой с определенным именем/глубиной в начале комнаты и установить его соответствующим образом.
Сохранение объекта на слое той же глубины:
Сохраните глубину текущего слоя объекта в конце комнаты и найдите слой с такой же глубиной в начале комнаты и установите слой объекта на этот слой. Если слой не существует, создайте слой с такой же глубиной и установите его на этот слой. Простой!
В событии Create укажите следующее:
targetDepth = layer_get_depth(layer);
(Событие Room Start будет запущено при запуске игры, поэтому вам не нужно устанавливать targetDepth
в -1
или какое-либо другое произвольное значение. Или вы можете просто выполнить проверку позже.)
В событии Конец комнаты получите текущую глубину слоя (которая также является глубиной целевого слоя для следующей комнаты) таким же образом:
targetDepth = layer_get_depth(layer);
Теперь в событии Room Start сделайте следующее:
// Get an array containing IDs of all the layers in the room var layersArray = layer_get_all(); var targetLayer = -1; // Loop through the array to check if the depth of any layer matches // the target depth for (var i=0; i<array_length_1d(layersArray); i++) { // If such layer is found, set the target layer to that one if (layer_get_depth(layersArray[i]) == targetDepth) { targetLayer = layersArray[i]; break; } } // If no such layer is found, create a new one at that depth if (!layer_exists(targetLayer)) { targetLayer = layer_create(targetDepth, "Layer_New"); } // Set the layer layer = targetLayer;
Вот и все, постоянный объект теперь находится на слое на той же глубине, когда вы меняете комнаты!
Поиск слоя с определенными свойствами:
Или, если вы просто хотите найти слой с определенным именем, просто укажите это в событии Room Start:
var targetName = "Layer_One"; var targetLayerID = layer_get_id(targetName); var targetDepth = layer_get_depth(targetLayerID); // Or, you can set your own value // If layer with the name doesn't exist, create one with that name if (!layer_exists(targetLayerID)) { targetLayerID = layer_create(targetDepth, targetName); } // Set the Layer layer = targetLayerID;
Спасибо за чтение. Надеюсь, ваши постоянные объекты больше не живут в несуществующем слое!