您可能知道,Cocos2D-iphone 1.x中CCFileUtils的所有类方法都被重写为Cocos2d 2.x中单例[CCFileUtils sharedFileUtils]的实例方法,因此不是
[CCFileUtils fullPathFromRelativePath:... resolutionType:...]
我们需要使用
[[CCFileUtils sharedFileUtils] fullPathFromRelativePath:maskFileName resolutionType:&resolution]
我已经编写了一个用于屏蔽精灵的扩展(http://www.cocos2d-iphone.org/forum/topic/30494),它大量使用CCFileUtils,现在需要使它与cocos2d 1.x和2.X
我知道CC_ENABLE_DEPRECATED标志有助于即时转换这些调用,但我希望有一个明确的解决方案。类似于类方法的东西,它会返回一个id,以便像这样使用它:
Method:
+ (id) getCCFileUtils
{
id fileUtils = [CCFileUtils class];
if ([fileUtils instancesRespondToSelector:@selector(fullPathFromRelativePath:resolutionType:)])
{
return [fileUtils sharedFileUtils];
}
else
{
return fileUtils;
}
}
Usage:
id myFileUtils = [MyClass getCCFileUtils];
[myFileUtils fullPathFromRelativePath:maskFileName resolutionType:&resolution]
}
当然,我在Cocos 1.x中收到错误“没有选择器'sharedFileUtils'的已知实例方法',因为没有这样的选择器。我应该如何重写它才能开始工作?
答案 0 :(得分:1)
嗯,我睡了一下后自己做了:) 分享代码:
/**In Cocos2d v 2.0 CCFileUtils class methods were moved to instance methods.
Here we set SSK_FILE_UTILS to class or instance depending on Cocos2D version.
*/
#ifdef COCOS2D_VERSION
#if COCOS2D_VERSION >= 0x00020000
#define SSK_FILE_UTILS [CCFileUtils sharedFileUtils]
#else
#define SSK_FILE_UTILS CCFileUtils
#endif
#else
#define SSK_FILE_UTILS nil
#endif
用法:
[SSK_FILE_UTILS fullPathFromRelativePath:... resolutionType:...]