Итак, у меня есть шестнадцатеричная сетка, которая имеет сетку 100x100 ... Сетка рекурсивная, поэтому, когда вы прокручиваете влево после позиции '0,0', она рисует строку '99, 0 'и т. Д. ... Моя проблеманайти алгоритм, который позволит мне вычислить, возвращаюсь ли я обратно ...
Пример: 96 - 97 - 98 - 99 - 0 - 1 - 2 - 3 - 4
Оба изу них есть начальные местоположения, меньшие, чем конечное местоположение. Если я был в строке 2, а экран перемещался в строку 98:
2 до 98 РАБОТ (98) - 100 = -2, а затем -2- (2) = расстояниеот 4
96 до 98 FAILS (98) - 100 = -2, затем -2- (96) = расстояние 98 (правильное значение 2)
Оба из них имеют конечные местоположения меньше, чемстартовое местоположение Однако это не работает в обоих направлениях ... поэтому мы делаем это ... из строки 98 в строку 2:
98 до 2 РАБОТ (2) + 100 = 102, затем 102- (98)) = расстояние от 4
96 до 98 FAILS (96) + 100 = 196, затем 196- (98) = расстояние от 98 (правильное значение 2)
Как видите, я не могу простоскажем, если начало <конец или начало> конец какчисло петель шурупов.Мне нужно определить, когда "Пересекая черту", как ...
После предложений Джонатана я понял, что отображение клиента и за кулисами не должно совпадать.Я изменил двигатель, поэтому есть 2 шестнадцатеричных значения ... одно - фактическая позиция, например 98,2 0,0 2,1.Другой - буквальная позиция от порта просмотра.
Выглядит так:
Actual: 96 97 98 99 00 01 02 03 04 <= display in client & reference hexGridModel
Literal: -4 -3 -2 -1 00 01 02 03 04 <= use to calculate buffer position updates from camera
Литерал только с точки зрения «отображения».Позже мне понадобится исправление, чтобы увидеть, пройдем ли мы значение -100 или +100, но эта проблема решена на данный момент, а размеры карт являются динамическими, поэтому мне понадобится позже поработать над этим
Теперь я просто использовал это для любого случая.
var x, y = 0
x = this.buffer.coords.current.x - this.buffer.coords.last.x;
y = this.buffer.coords.current.y - this.buffer.coords.last.y;