我正在學習Cocos2dx,我正在使用平鋪的地圖。 所以,讓我們考慮下面這段代碼:一個非常大的數組(連續的內存塊)
auto map = TMXTiledMap::create("map.tmx");
auto layer = map->getLayer("Tile Layer 1");
auto gid = layer->tileGIDAt(Point(X, Y));
行和最後一行與我有關。我很困惑,因爲我看到了實現tileGIDAt(點):
uint32_t TMXLayer::getTileGIDAt(const Vec2& pos, TMXTileFlags* flags/* = nullptr*/)
{
CCASSERT(pos.x < _layerSize.width && pos.y < _layerSize.height && pos.x >=0 && pos.y >=0, "TMXLayer: invalid position");
CCASSERT(_tiles && _atlasIndexArray, "TMXLayer: the tiles map has been released");
ssize_t idx = static_cast<int>((pos.x + pos.y * _layerSize.width));
// Bits on the far end of the 32-bit global tile ID are used for tile flags
uint32_t tile = _tiles[idx];
// issue1264, flipped tiles can be changed dynamically
if (flags)
{
*flags = (TMXTileFlags)(tile & kTMXFlipedAll);
}
return (tile & kTMXFlippedMask);
}
所以,我很困惑,因爲地圖上似乎被表示爲存儲陣列。
爲什麼可能?這對我很重要,因爲你知道瓷磚地圖可能非常大。關於尺寸的地圖是什麼:100萬瓦片×1000000瓦片。結果我們應該採用Tile的1000000^2個元素,所以我們需要一個非常長的連續的內存塊。但是獲得這麼大的內存是不可能的(有可能嗎?)。
請解釋一下。
1,000,000^2字節大約是931 * tera *字節。沒有人擁有這種類型的記憶。 – Neil
@Neil 1,000,000^2字節是「僅」〜931GB。 – LogicStuff
@LogicStuff糟糕,你是對的。儘管如此,仍然有點高。 – Neil