【问题标题】:Scrolling large tile map using cocos2d-x gives me black tiles where there should be green tiles使用 cocos2d-x 滚动大瓷砖地图会给我黑色瓷砖,那里应该有绿色瓷砖
【发布时间】:2014-01-02 20:06:36
【问题描述】:

我正在加载使用 Tiled 软件创建的 400x400 平铺地图。 一个图块是 120 像素,总共 48000x48000 像素。

我是这样加载的

    regionMap->initWithTMXFile("background2.tmx");
    mapLayer->addChild(regionMap, 0, enTagTileMap);
    mapLayer->setAnchorPoint(CCPoint(0,1));

然后我像这样滚动。

    mapLayer->setPosition(position);

当我垂直滚动到这个位置时,我不再从地图中获取图块,我只是得到黑色图块。

    x=0 , y=5483.748535

当我水平滚动时,即使到达这个位置也不会遇到同样的问题。

    x=-48000, y=400

感谢您的提前。

【问题讨论】:

    标签: cocos2d-x tmx


    【解决方案1】:

    我认为假设 cocos2d-x 的 tilemap 渲染器是 cocos2d-iphone 的直接端口是公平的。如果为 true,则它们都具有相同的限制,即最多可以显示 65,536 个顶点(16,384 个图块)(不包括空图块)。

    假设只有一层并且没有任何“空”图块(空 == GID 值为 0 的图块位置),您的图块地图为 400x400 = 160,000 个图块。这意味着 cocos2d 将/可以渲染的图块数量大约是十倍。

    Cocos2d 最多只会渲染 16,384 个图块然后停止,剩余的图块不会被渲染,所以你会看到背景颜色(默认:黑色)。

    一种常见但尴尬的解决方法是将地图拆分为多个 TMX 文件并在代码中对齐。

    【讨论】:

    • 非常感谢。我尝试使用 200x200 平铺贴图,它还在大约 y=80 时停止渲染。 tilemap 包含一个图层,所有图层都填充了来自相同纹理的图块。所以我认为cocos2d-x可以渲染的只是大约16,000个而不是65,536个瓦片。我尝试了 125x125 并且它工作正常,但这太有限了,令人难以置信。我做错了吗?
    • 对不起,我的错。它有 65k 个顶点,但每个图块有 4 个顶点,因此构成 16k 个图块。
    • 考虑将其拆分为多个瓷砖地图,并在您的角色接近边缘时动态加载/卸载它们。您应该能够通过这种方式巧妙地避免这些限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多