Самый эффективный способ сохранить данные тайлов изометрической игры

testThread не вызывается при создании объектов Thread в цикле for - метод вызывается всякий раз, когда запускается поток. И это может произойти позже.

В вашем случае потоки начали работать после завершения цикла for - к тому времени i было равно 3. Таким образом, testThread вызывается 3 раза со значением 3.

32
задан Andrei Botalov 4 August 2012 в 20:29
поделиться

4 ответа

Если вы пытаетесь сделать что-то вроде рисунка, вам не нужно сохранять, какие углы находятся вверх / вниз, так как это можно определить по окружающим плиткам .

Например, если текущий тайл имеет высоту n , а высота тайла на один выше текущего тайла - height n + 1 , то текущий тайл должен иметь «верхний угол». вверх "

Отлично! Спасибо! Я попробую это реализовать. Еще одна мысль, чтобы завершить ответ: можно ли сохранить высоту и идентификатор плитки в виде целого числа?

Да. Вам нужно будет использовать Побитовые операции .

Если вы разделите целое число поровну между высотой и идентификатором, используя первые 16 бит для высоты и остальную часть идентификатора

var id = tile & 0x0000FFFF; //mask the first 16 bits
var height = tile >>> 16; //shift the first 16 bits to the right

Настройка может быть выполнена аналогичным образом

tile &= 0xFFFF0000; //remove id bits
tile |= id; //set new id

tile &= 0x0000FFFF; //remove height bits
tile |= (height << 16);
14
ответ дан 27 November 2019 в 21:16
поделиться

Если высота находится в диапазоне [0, 255], вы можете сохранить 4 высоты в одном целом числе, используя битовые манипуляции. В шестнадцатеричном формате:

0xAABBCCDD, AA = первая высота, BB = вторая и т. Д.

Чтобы получить крайнюю левую высоту, вы должны сделать ((0xAABBCCDD & 0xFF000000) >> 24) & 0xFF , который возвращает 170 (0xAA).

Чтобы установить: целое число & = (0x00FFFFFF); / * Очистить значение * / integer | = (height << 24);

0
ответ дан 27 November 2019 в 21:16
поделиться

Да, вы можете:

var corners = 11; // binary 1011;
var topCornerUp = corners & 0x8;
var bottomCornerUp = corners & 0x2;

Однако, если вы хотите его оптимизировать, подумайте, что Якоби сказал - вы можете хранить массив углов вместо того, чтобы сохранять их отдельно для каждой плитки.

3
ответ дан 27 November 2019 в 21:16
поделиться

Является ли область прямоугольной? Если да, то вы можете просто хранить ширину и высоту области, длину плитки и массив целых чисел, представляющих высоты вершин.

0
ответ дан 27 November 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: