【问题标题】:sprite sheet not working for retina display精灵表不适用于视网膜显示
【发布时间】:2013-04-27 18:25:48
【问题描述】:

我为non retina display 创建了一个sprite sheet,它在模拟器上运行良好。 我已经使用了代码

 -(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..,创建的plistmyplist@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

【问题讨论】:

    标签: ios6 cocos2d-iphone sprite-sheet


    【解决方案1】:

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

    myPlist-hd.plist

    【讨论】:

      【解决方案2】:

      按照给定的步骤 -

      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];
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多