在运行时交换tileset? TMX Cocos2d-iPhone

时间:2013-05-13 16:51:58

标签: cocos2d-iphone tmx

我正在潜水并尝试学习cocos2d。 目前我正试图按下按钮上的瓷砖组。

实施例: 玩家站在草地上,按下按钮,瓷砖组会变成雪纹。

我使用平铺来创建地图,我希望我能够只切换平铺用于显示平铺的图像表。

图像表尺寸完全相同,图像位置完全相同..

如果有人有任何建议或意见,我将不胜感激! :)

1 个答案:

答案 0 :(得分:2)

使用tileset的CCTMXLayer类继承自CCSpriteBatchNode。您可以尝试使用新的tileset纹理向CCTMXLayer发送setTexture:消息。

然而,只是略读代码,这将是一个问题。例如,设置纹理肯定不会改变当前作为批处理节点的子节点的任何切片的纹理,这意味着它们将无法渲染或者事物将崩溃,因为它们将使用与批处理节点不同的纹理。可以同时更新所有精灵的纹理,但我认为这不会起作用,因为批处理节点或精灵的纹理是否发生变化,它将与批处理节点的纹理不同并触发错误。 / p>

一种可能的方法似乎是删除整个CCTMXLayer并将其替换为新的CCTMXLayer。但是,CCTMXLayer使用仅在内部使用的结构进行初始化,并且至少一些可能仅在加载时可用。所以最终可能在普通cocos2d中替换tileset的唯一方法是替换整个CCTMXTiledMap节点,这意味着很多开销就这么简单了。

当然,你可以将草和雪砖添加到同一个瓷砖组中,只需更改瓷砖GID,如果这就是你想做的。

正如我所提到的,KoboldTouch allows changing tilesets at runtime。 KoboldTouch本身使用cocos2d-iphone作为渲染器。