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

Cocos2d iphone 在运行时交换tileset?TMX Cocos2d iPhone,cocos2d-iphone,tmx,Cocos2d Iphone,Tmx,我正在努力学习cocos2d。 目前,我正试图交换一个按钮按下瓷砖集 例如: 玩家站在草地上,按下按钮,瓷砖集将变为雪纹理 我使用平铺创建地图,我希望我能够切换平铺用于显示平铺的图像表 图像页大小完全相同,图像位置完全相同 如果有人有任何建议或意见,我将不胜感激!:) 使用tileset的CCTMXLayer类继承自CCSpriteBatchNode。您可以尝试向CCTMXLayer发送带有新tileset纹理的setTexture:消息 不过,只要浏览一下代码,就会发现在某些领域这是一个问题。

我正在努力学习cocos2d。 目前,我正试图交换一个按钮按下瓷砖集

例如: 玩家站在草地上,按下按钮,瓷砖集将变为雪纹理

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

图像页大小完全相同,图像位置完全相同


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

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

不过,只要浏览一下代码,就会发现在某些领域这是一个问题。例如,设置纹理肯定不会更改当前作为批处理节点的子节点的任何平铺的纹理,这意味着它们将无法渲染,或者事情将崩溃,因为它们将使用与批处理节点不同的纹理。可以同时更新所有精灵的纹理,但我认为这不起作用,因为无论批处理节点或精灵的纹理发生变化,它都会与批处理节点的纹理不同,并触发错误

一种可能的方法似乎是移除整个CCTMXLayer并用新的替换它。但是,CCTMXLayer是使用仅在内部使用的结构初始化的,并且至少有些结构可能仅在加载时可用。因此,最终在普通cocos2d中替换tileset的唯一方法可能是替换整个CCTMXTiledMap节点,这意味着这样简单的事情会有很多开销

当然,您可以将草和雪瓷砖添加到同一瓷砖集中,只要更改瓷砖GID即可,如果您只想这么做的话


正如我提到的。KoboldTouch本身正在使用cocos2d iphone作为其渲染器。

我相信,如果不修改代码,这是不可能做到的。您可以尝试允许交换瓷砖集,还有更多。非常感谢您的回复!我正在研究GID选项,这可能是我考虑的问题。它看起来是最干净的,我真的想避免任何和所有可能的bug。:)