Как преобразовать слой плитки в объект для сортировки по глубине относительно игрока? - PullRequest
0 голосов
/ 05 октября 2019

По сути, я делаю клон Долины Старой росы, используя наборы плиток и слои листов, чтобы нарисовать фон каждой комнаты. У меня есть «Объект глубины родителя». У каждого потомка этого объекта (NPC, урожаи) его глубина отсортирована относительно объекта игрока, чтобы появиться перед или позади игрока. Это отлично работает.

У меня есть «наземные предметы» (бочки, камни и т. Д.), Нарисованные в один слой плитки в каждой комнате. Я хочу, чтобы игрок мог появляться позади или перед ними тоже. Можно ли каким-то образом заставить весь этот слой действовать так, как если бы он был одним объектом, чтобы я мог добавить его к своему родительскому объекту глубины, или мне нужно создать отдельный объект для каждого элемента земли?

МойОбъект 'deepSorter' создает структуру данных, добавляет к ней каждый экземпляр и перебирает его, сортируя глубину каждого относительно игрока.


/// @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;
}

...