CCFileUtils:从Cocos2D-iphone 1.x中的类方法过渡到Cocos2D 2.x中的实例方法

时间:2012-05-10 15:12:58

标签: cocos2d-iphone

您可能知道,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'的已知实例方法',因为没有这样的选择器。我应该如何重写它才能开始工作?

1 个答案:

答案 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:...]