cocos2d(iPhone / iPad)错误地将-hd(视网膜)资产缩放到50%的显示尺寸

时间:2013-08-22 02:45:21

标签: iphone ipad cocos2d-iphone

我已阅读cocos2d guide to retina displays。我的游戏中有常规和-hd资产。问题是视网膜显示装置看起来与非视网膜不同,好像图像已经缩放到50%。考虑以下屏幕截图,左侧是iPhone(非视网膜),右侧是iPhone 5(视网膜):

enter image description here

请注意,在正确的屏幕截图中,尽管事实 -hd资产为@ 2x,但资产已按比例缩小了50%。例如,使用“叶子图标”,有green_icon.png(50x50像素)和green_icon-hd.png(100x100像素)。在左图中,它显示@ 50x50像素(正确),但在右图中显示为25x25像素(错误地缩小视网膜图像,似乎)。

这是我的启动代码:

NSString *EXT_HD = @"-hd";
CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils];
[sharedFileUtils setEnableFallbackSuffixes:YES];
[sharedFileUtils.suffixesDict setValue:EXT_HD forKey:(NSString*)kCCFileUtilsiPhoneHD];
[sharedFileUtils.suffixesDict setValue:EXT_HD forKey:(NSString*)kCCFileUtilsiPhone5HD];
[sharedFileUtils.suffixesDict setValue:EXT_HD forKey:(NSString*)kCCFileUtilsiPadHD];
[sharedFileUtils.suffixesDict setValue:EXT_HD forKey:(NSString*)kCCFileUtilsMacHD];
[[CCDirector sharedDirector] enableRetinaDisplay:YES];

(请注意,我也尝试过明确禁用视网膜显示而没有运气)。

这是我创建精灵的实际实现(例如,绿叶图标):

[CCSprite spriteWithFile:fpIcon];

非常直截了当......

1 个答案:

答案 0 :(得分:0)

经过一番挖掘后,我发现这种情况正在发生,因为我正在将绝对图像资产路径传递给cocos2d。由于我不会进入的原因,这在我的游戏中是必要的。但是,当提供绝对路径时,cocos2d故意不会尝试在文件路径上使用-hd(或其他变体)。

具体来说,如果传递完整路径,您可以看到CCFileUtils.mfullPathForFilename中止:

-(NSString*) fullPathForFilename:(NSString*)filename resolutionType:(ccResolutionType*)resolutionType
{
    // fullpath? return it
    if ([filename isAbsolutePath]) {
        CCLOGWARN(@"cocos2d: WARNING fullPathForFilename:resolutionType: should not be called with absolute path. Instead call fullPathForFilenameIgnoringResolutions:");
        *resolutionType = kCCResolutionUnknown;
        return filename;
    }