因此,我正在开发一种具有固定摄像机位置的 3d游戏。我有很多实体,每个实体都有这些属性:
例如,可以通过以下方式构造实体:
现在我要在3d地图上绘制许多实体。由于我想在背景中的对象前面绘制前景中的对象,因此必须对画布中的对象的绘制进行排序。这意味着必须先绘制其他对象后面的对象,依此类推...
我已经尝试了许多个小时,以弄清楚如何对对象进行排序。使用此排序功能,我走到了尽头,因为不幸的是,计算无法正常进行。我完全不知道该如何解决这个问题,但我认为将我的想法添加到问题中对我们所有人来说并不算太坏。
let objects = {
entity1: {
position: {
x: 0,
y: 10,
z: 5
},
hitbox: {
sizeX: 4,
sizeY: 1
}
},
entity2: {
position: {
x: 4,
y: 2,
z: 4
},
hitbox: {
sizeX: 3,
sizeY: 3
}
}
}
let layeredObjects = Object.values(objects).sort((itemA, itemB) => {
if ((itemA.position.x - itemA.hitbox.sizeX < itemB.position.x + itemB.hitbox.sizeX) &&
(itemA.position.y + itemA.hitbox.sizeY < itemB.position.y - itemB.hitbox.sizeY) ||
(itemA.position.x + itemA.hitbox.sizeX < itemB.position.x - itemB.hitbox.sizeX)) return -1;
return 1;
})
console.log(layeredObjects)
因此,针对我的问题的最佳解决方案是一种方法,该方法能够以易于将它们绘制到画布中的方式返回排序的实体(层)。
我很高兴您的帮助。