你好我正在使用一个使用块的2d地图加载器。
我正在使用此方法计算与屏幕边界相交的块的位置。
// left bottom
rect.x = x - x % chunkSize;
if (x < 0) rect.x -= chunkSize
rect.colIndex = (int) (rect.x / chunkSize);
rect.y = y - y % chunkSize;
if (y < 0) rect.y -= chunkSize;
rect.rowIndex = (int) (rect.y / chunkSize);
// right top
float x2 = x + width, y2 = y + height;
float rectX = x2 - x2 % chunkSize;
if (x2 < 0) rectX -= chunkSize;
int colIndex = (int) (rectX / chunkSize);
float rectY = y2 - y2 % chunkSize;
if (y2 < 0) rectY -= chunkSize;
int rowIndex = (int) (rectY / chunkSize);
rect.rows = rowIndex - rect.rowIndex + 1;
rect.cols = colIndex - rect.colIndex + 1;
for (int i = 0; i < rect.rows; i++) {
for (int j = 0; j < rect.cols; j++) {
Chunk chunk = chunkPool.obtain();
chunk.x = rect.x + chunkSize * j;
chunk.y = rect.y + chunkSize * i;
chunk.rowIndex = rect.rowIndex + i;
chunk.colIndex = rect.colIndex + j;
}
}
信息:
如果添加了Chunk,则必须加载数据,如果删除了要卸载的块数据。
每次屏幕x / y / size
发生变化时都会调用此方法。
我的问题是:我需要知道从最后一个数组中删除/添加的块是什么。我怎样才能做到这一点。为了识别,我会使用rowIndex / colIndex
。它应该很快,因为它会被频繁调用。 HashTable可以选择吗?
答案 0 :(得分:1)
哈希表只为您提供一个查找键,您需要按行和列查找值。因此,您需要创建复合键或使用类似于表的数据结构来获取所需的2个维度。恰好Guava已经在这里实现了这个:https://github.com/google/guava/wiki/NewCollectionTypesExplained#table