cocos2d 1.1精灵用于视网膜4英寸iPhone5

时间:2012-10-03 11:28:11

标签: cocos2d-iphone ios6 sprite iphone-5

我使用cocos2d 1.1,xCode 4.5作为我游戏的progect。我想重新编写我的游戏以支持iPhone 5.但是我遇到了问题:cocos2d 1.1无法检测到视网膜4英寸的精灵。

Default-568h@2x.png - 工作正常,但游戏的精灵显示为* -hd.png。 似乎cocos2d 1.1只能检测到* -hd.png,但是我添加了精灵* -568h@2x.png。

抱歉我的英文。

此问题的解决方法在 CCFileUtils.m 文件中,如下所示 sergio

我在方法 +(NSString *)getDoubleResolutionImage:(NSString *)路径

中做了一些小改动
+(NSString*) getDoubleResolutionImage:(NSString*)path
{
#if CC_IS_RETINA_DISPLAY_SUPPORTED

    if( CC_CONTENT_SCALE_FACTOR() == 2 )
    {
        NSString *pathWithoutExtension = [path stringByDeletingPathExtension];
        NSString *name = [pathWithoutExtension lastPathComponent];

        NSString *extension = [path pathExtension];

        if( [extension isEqualToString:@"ccz"] || [extension isEqualToString:@"gz"] )
        {
            extension = [NSString stringWithFormat:@"%@.%@", [pathWithoutExtension pathExtension], extension];
            pathWithoutExtension = [pathWithoutExtension stringByDeletingPathExtension];
        }

        CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;

        if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f)
        {
            if( [name rangeOfString:CC_RETINA4_DISPLAY_FILENAME_SUFFIX].location != NSNotFound ) {

                CCLOG(@"cocos2d: WARNING Filename(%@) already has the suffix %@. Using it.", name, CC_RETINA4_DISPLAY_FILENAME_SUFFIX);
                return path;
            }

            NSString *retinaName = [pathWithoutExtension stringByAppendingString:CC_RETINA4_DISPLAY_FILENAME_SUFFIX];
            retinaName = [retinaName stringByAppendingPathExtension:extension];

            if( [__localFileManager fileExistsAtPath:retinaName] )
            {   
                return retinaName;
            }
        }

        if( [name rangeOfString:CC_RETINA_DISPLAY_FILENAME_SUFFIX].location != NSNotFound ) {

            CCLOG(@"cocos2d: WARNING Filename(%@) already has the suffix %@. Using it.", name, CC_RETINA_DISPLAY_FILENAME_SUFFIX);
            return path;
        }

        NSString *retinaName = [pathWithoutExtension stringByAppendingString:CC_RETINA_DISPLAY_FILENAME_SUFFIX];
        retinaName = [retinaName stringByAppendingPathExtension:extension];
        if( [__localFileManager fileExistsAtPath:retinaName] )
        {   
            return retinaName;
        }

        CCLOG(@"cocos2d: CCFileUtils: Warning HD file not found: %@", [retinaName lastPathComponent] );

    }

#endif // CC_IS_RETINA_DISPLAY_SUPPORTED

    return path;
}

并添加文件 ccConfig.h

#ifndef CC_RETINA4_DISPLAY_FILENAME_SUFFIX
#define CC_RETINA4_DISPLAY_FILENAME_SUFFIX @"-568h@2x"
#endif

如果有人发出通知,请写下

2 个答案:

答案 0 :(得分:1)

您可以在ccConfig.h文件中更改后缀

#ifndef CC_RETINA_DISPLAY_FILENAME_SUFFIX
#define CC_RETINA_DISPLAY_FILENAME_SUFFIX @"-hd"
#endif

答案 1 :(得分:1)

据我所知,Cocos2D 2.x对iPhone 5 -568h @ 2x图像没有普遍的支持。

添加到cocos2D 2.1的唯一iPhone 5特定支持涉及向Xcode模板添加Default-568h@2x.png图像。有关详细信息,请阅读ChangeLog

另一方面,在UIKit中也没有支持“-568h @ 2x images”,所以我认为cocos2D不会添加一个。

在更概念的层面上,我理解支持iPhone 5分辨率的一般方法不是在位图级别(即提供不同缩放的图像),而是在布局级别(即,改变非布局或大小) -image UI元素)。 (如果你考虑一下,我们必须为iPhone和iPad管理x1和x2图像:这意味着每个图像有4个不同的版本;为此添加另一个尺寸会很疯狂。)

如果您的应用确实需要使用缩放图像,那么我猜您在使用UIKit和使用cocos2D时都是自己的。

从好的方面来说,如果您查看CCFileUtils.h,可以轻松更改它以便它支持-568h@2x。如果您想讨论这个问题,请查看this blog post,其中介绍了类似的更改,但适用于iPad 3.它可能有助于您构建自己的解决方案。