每当我使用
sprite = [CCSprite spriteWithFile:@"image.png"];
Cocos2d一直非常聪明,可以在非视网膜设备上寻找“image.png”,在视网膜设备上寻找“image@2x.png”。
但每当我尝试动态构建精灵文件名字符串,即
int random = arc4random() % 2;
switch (random) {
case 0:
color = @"blue";
break;
case 1:
color = @"green";
break;
default:
break;
}
filename = [[NSString alloc] initWithString:color];
filename = [filename stringByAppendingString:@"Square.png"];
// Sprite should now be either "greenSquare.png" or "blueSquare.png"
sprite = [CCSprite spriteWithFile:filename];
突然间,我的@ 2x文件被完全忽略了 - 而cocos2d只查找===“greenSquare.png”的文件,即“greenSquare@2x.png”从未被拾取,如果“ greenSquare.png“不存在(我当时只测试了视网膜显示)整个应用程序崩溃。
知道为什么会这样,我能做些什么来解决这个问题?
(理想情况下,无需手动检查设备视网膜状态,然后手动添加@ 2x - 因为我知道这是一个可能的解决方案,它似乎不是正确的解决方案。)
谢谢!
答案 0 :(得分:6)
cocos2d不使用@ 2x命名方案。相反,它使用后缀-hd用于iphone视网膜图像,-ipad用于ipad图像,-ipadhd用于ipad视网膜图像。
示例:“Square.png”和“Square-hd.png”
您还可以启用后备后缀。启用后,它将尝试按以下顺序搜索以下后缀,直到找到一个:
(如CCFileUtils.h文件中所述)
答案 1 :(得分:1)
视网膜图像的标准cocos2D是sufix -hd如果您的图像名为“greenSquare.png”,cocos2D的视网膜需要命名为“greenSquare-hd.png”,但您可以更改此标准并告诉cocos2D使用sufix @ 2x,你可以修改AppDelegate.m
搜索行
CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils];
[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"];
并将sufix @“ - hd”更改为@“@ 2x”,因此您的代码可能如下所示:
[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"@2x"];
最佳做法是更改所有图片的名称,将“@ 2x”替换为“-hd”