0

我已经创建了一个sprite sheetfornon retina display并且它在模拟器上运行良好..我已经使用了代码

 -(Void)addSprites{
     [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"image.plist"];

    CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"image.png"];
    [self addChild:spriteSheet];

 // Load up the frames of our animation
    NSMutableArray *walkAnimFrames = [NSMutableArray array];
    for(int i = 1; i < 5; i++) {
        [walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"image%d.png", i]]];
    }

    CCAnimation *walkAnim = [CCAnimation animationWithSpriteFrames:walkAnimFrames delay:0.20f];
// Create a sprite for our bear

    background = [CCSprite spriteWithSpriteFrameName:@"image1.png"];
    background.position = ccp(280, 175);
    self.walkAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:walkAnim]];
    [spriteSheet addChild:background];  
}
 -(void)startAnimation{
    [background runAction:_walkAction];

}

对于设备,我创建了具有双倍大小的视网膜图像的精灵表,图像命名image@2x..为创建plist的 ismyplist@2xplist和图像文件是imagefile@2x.png

我的意思是有4个文件

用于非视网膜显示。

1)imagefile.png(sprite sheet)

2)myPlist.plist

用于 Retina 显示屏。

1)imagefile@2x.png(sprite sheet) 每个图像的 plist 键名也类似于 image@2x.png

2)myPlist@2x.plist

但上面的代码不适用于此代码。我做错了什么或错过了什么?我的应用程序在设备上崩溃并显示错误消息

 CCSpriteFrameCache: Frame 'image1.png' not found
2013-05-03 16:19:49.764  *** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object    cannot be nil'

但上面的代码是working fine on simulator

4

2 回答 2

2

默认情况下 cocos2d 使用 -hd 后缀而不是“@2x”。并且精灵表中的文件名需要相同,没有任何“-hd”或@2x。只是主要的精灵表文件名需要带有后缀“-hd”。

myPlist-hd.plist

于 2013-05-03T11:16:39.957 回答
0

按照给定的步骤 -

  1. 为视网膜和正常分辨率创建两个不同的精灵表。

  2. 假设您有四个图像 image1.png,image2.png,image3.png,image4.png 。首先确保它们具有根据视网膜显示的大小。然后使用这些图像创建 spritesheet 和 plist。将它们保存为 animation@2x.png 和 animation@2x.plist

  3. 然后将相同的四张图像缩小到一半。确保他们的名字保持不变。使用名为animation.png 和animation.plist 的zwoptex 创建工作表。

现在你有两个不同版本的 spritesheets 和 Plist 用于视网膜和正常。使用以下代码加载它们:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"animation.plist"];

CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"animation.png"];
[self addChild:spriteSheet];

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"animation@2x.plist"];

CCSpriteBatchNode *spriteSheethd = [CCSpriteBatchNode batchNodeWithFile:@"animation@2x.png"];
[self addChild:spriteSheethd];

现在使用它们。他们会很好地显示

于 2013-05-03T11:20:42.017 回答