Странная ошибка при отображении чанков - PullRequest
0 голосов
/ 16 сентября 2018

Так что я работаю над технически 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);

Я понятия не имею, что вызывает колебание, я пытался решить это как день безуспешно. Снятие напольного покрытия только вызывает еще больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...