Так что я работаю над технически 3d, но отображается в 2D игре вокселя сверху.
Я сделал рабочий показ для мира и его тайлов, но затем я добавил сущности. Предполагалось, что они будут работать таким образом, что их будут назначать на определенные куски для оптимизации отображения. Они определенно правильно назначены, но проблема в отображении. Куски, которые выбирает алгоритм, либо колеблются и изменяются вместе с соседними чанками, либо выбираются совершенно неправильно.
Я запускаю дисплей во вложенном цикле - так, чтобы он отображал все вещи, видимые игроку. (rangeX в пикселях, view [3] в пикселях на плитку)
double ama = viewing.chunksize;
for (int x = (int)-ama; x <= ama + rangeX / view[3]; x += (int)ama)
{
for (int y = (int)-ama; y <= ama + rangeY / view[3]; y += (int)ama)
{
Сначала я выбираю 3D-вектор (я вычитаю позицию Y, потому что он рендерится сверху слева, а не снизу слева)
Vector where = new Vector((x + view[0]), (y - view[1]), viewing.size[2] * 0.96); // in tiles
тогда я полагаю вектор до ближайшего куска
where = Vector.RoundAbout(viewing, where); // this method works flawlessly, proven by the tile display being correct
where = new Vector(Math.Floor(where[0] / ama) * ama, Math.Floor(where[1] / ama) * ama, where[2]); // round to 16's
затем он выбирает чанк на основе тайла - вот где я сталкиваюсь с проблемой. Я проверил это с тем, где находится моя мышь и какой у нее кусок, но он полностью отличается от того, что выбирает. Метод ChunkAt работает правильно, но не цикл, как-то. (Класс Point такой же, как класс Vector, но он содержит только целые числа)
CelestialBody.Chunk at = viewing.ChunkAt((Point)where);
Я понятия не имею, что вызывает колебание, я пытался решить это как день безуспешно. Снятие напольного покрытия только вызывает еще больше.