如何将一个tile层转化为一个对象进行相对于播放器的深度排序?
How to convert a tile layer into an object for depth sorting relative to the player?
我基本上是在制作星露谷克隆版,使用图块集和图块层来绘制每个房间的背景。我有一个'Parent Depth Object'。该对象的每个子对象(NPC、作物)的深度都相对于玩家对象进行排序,以显示在玩家的前面或后面。这很好用。
我将 'ground items'(桶、石头等)绘制到每个房间的单个瓷砖层上。我希望玩家也能够出现在它们的后面或前面。有什么方法可以使整个层像单个对象一样工作,这样我就可以将它添加到我的父深度对象中,或者我必须为每个地面项目创建一个单独的对象吗?
我的 '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;
}
我个人建议使用这些你想藏起来的物品作为物品,而不是瓷砖。磁贴本身不能包含脚本。所以按照你想要的方式使用它们会变得更加棘手。
但是,您不需要为每个 'ground item' 创建一个新对象。
相反,您可以制作一个名为 'ground item' 的对象,并将精灵/相关代码更改为该对象。
例如,在选择房间中的对象时,您可以使用 'Creation Code' 添加该对象的唯一代码。这样,您就可以将地面物品的精灵更改为它的唯一 ID。
另一个例子是创建一个对象,该对象是父对象 'ground object' 的子对象。所以每个对象都有自己的精灵,但重用了 'ground object'
中的对象
我基本上是在制作星露谷克隆版,使用图块集和图块层来绘制每个房间的背景。我有一个'Parent Depth Object'。该对象的每个子对象(NPC、作物)的深度都相对于玩家对象进行排序,以显示在玩家的前面或后面。这很好用。
我将 'ground items'(桶、石头等)绘制到每个房间的单个瓷砖层上。我希望玩家也能够出现在它们的后面或前面。有什么方法可以使整个层像单个对象一样工作,这样我就可以将它添加到我的父深度对象中,或者我必须为每个地面项目创建一个单独的对象吗?
我的 '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;
}
我个人建议使用这些你想藏起来的物品作为物品,而不是瓷砖。磁贴本身不能包含脚本。所以按照你想要的方式使用它们会变得更加棘手。
但是,您不需要为每个 'ground item' 创建一个新对象。 相反,您可以制作一个名为 'ground item' 的对象,并将精灵/相关代码更改为该对象。
例如,在选择房间中的对象时,您可以使用 'Creation Code' 添加该对象的唯一代码。这样,您就可以将地面物品的精灵更改为它的唯一 ID。
另一个例子是创建一个对象,该对象是父对象 'ground object' 的子对象。所以每个对象都有自己的精灵,但重用了 'ground object'
中的对象