Итак, я разрабатываю своего рода 3d игру с фиксированным положением камеры.У меня есть много сущностей, каждая из которых получает эти свойства:
- Позиция (координатаX, координата Y, координата Z) * 1006 *
- Хитбокс (sizeX, sizeY, sizeZ)
Например, сущность может быть структурирована следующим образом:
- Позиция (3, 4, 9)
- Хитбокс (2, 3, 1)
Теперь у меня на 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)
Таким образом, лучшим решением для моей проблемы был бы метод, который мог бы возвращать отсортированные сущности (слои) так, как я могу легко нарисовать их в своемхолст.
Буду очень рад вашей помощи.