小技巧,让cocos2d-x支持多语言Plist图片
- by Hector
小技巧,让cocos2d-x支持多语言Plist图片
之前看到有人在cocoachina的论坛问这个问题,正巧处理过这个问题,记录一下。
cocos2d-x加载plist图片之后,将纹理放在TextureCache
里面,SpriteFrameCache
存储了图片名称和纹理的对应关系。
跟踪代码不难发现,所有动画,UI最后或者纹理都是通过图片plist里面的名称来查找纹理的,最终调用的是这个方法:
SpriteFrame* SpriteFrameCache::getSpriteFrameByName(const std::string& name)
其中name,就是plist里面的key。
那么实现方式很简单了,我们在图片后面加上语言后缀,比如-zh.png,-en.png,在SpriteFrameCache添加一个std::vector<std::string> _fileExts;
数组,然后修改上面那个函数即可
SpriteFrame* SpriteFrameCache::getSpriteFrameByName(const std::string& name) { SpriteFrame* frame = nullptr; for (string& ext:_fileExts) { string nametemp = name; int pos = nametemp.rfind("."); nametemp.insert(pos,ext); frame = _spriteFrames.at(nametemp); if (frame) { return frame; } } if (!frame) frame = _spriteFrames.at(name); ………………………… }
因为纹理已经在内存里面了,切换语言后,清空原来的多语言后缀,新加现语言的后缀即可。逻辑和代码都十分简单,就不再仔细描述了。。。