По сути, я делаю клон Stardew Valley, используя наборы тайлов и слои тайлов, чтобы нарисовать фон каждой комнаты. У меня есть «Родительский объект глубины». Каждый дочерний элемент этого объекта (NPC, урожай) имеет свою глубину, отсортированную относительно объекта игрока, чтобы он отображался впереди или позади игрока. Это прекрасно работает.
У меня есть «наземные предметы» (бочки, камни и т. Д.), Нарисованные на одном слое плитки в каждой комнате. Я хочу, чтобы игрок мог появляться позади или перед ними. Могу ли я каким-либо образом заставить весь этот слой вести себя так, как если бы это был один объект, чтобы я мог добавить его к моему родительскому объекту глубины, или мне нужно создать отдельный объект для каждого наземного элемента?
Мой объект 'depthSorter' создает структуру данных, добавляет к ней каждый экземпляр и выполняет цикл, сортируя глубину каждого относительно игрока.
/// @description DSGridGetInst/Add/Sort/Loop
// get number of instances of parentDepthObject, save in variable instNum / resize grid
var instNum = instance_number(parentDepthObject);
var dGrid = dsDepthGrid;
ds_grid_resize(dGrid, 2, instNum);
// add instances to grid / have all of them run this code
var yy = 0; with(parentDepthObject)
{
dGrid[# 0, yy] = id;
dGrid[# 1, yy] = y;
yy += 1;
}
// sort the grid in ascending order (lowest y value at top)
ds_grid_sort(dGrid, 1, true);
// loop through the grid and draw all the instances
var inst; yy = 0; repeat(instNum)
{
// pull out an ID
inst = dGrid[# 0, yy];
// draw yourself
with(inst)
{
event_perform(ev_draw, 0);
}
yy += 1;
}