【问题标题】:Cocos2d: [CCSprite offset]: unrecognized selector sent to instance 0x9399cb0Cocos2d: [CCSprite offset]: unrecognized selector sent to instance 0x9399cb0
【发布时间】:2012-11-23 08:34:21
【问题描述】:

刚开始学习cocos2d-iphone 2.x。

尝试制作 CCSprite 的动画时,出现错误。

我的代码如下:

CCTexture2D *texture=[[CCTextureCache sharedTextureCache] addImage:@"dragon.png"];

CCSpriteBatchNode *spriteSheet=[CCSpriteBatchNode batchNodeWithTexture:texture];
[self addChild:spriteSheet];

NSMutableArray *animFrames=[[NSMutableArray alloc]init];
for (int i=1; i<8; i++) {
    [animFrames addObject:[CCSprite spriteWithTexture:spriteSheet.texture rect:CGRectMake(i*75, 0, 75, 70)]];
}

CCAnimation *flyAnim=[CCAnimation animationWithSpriteFrames:animFrames delay:0.1f];

CGSize winSize=[CCDirector sharedDirector].winSize;

CCSpriteFrame *frame3=[CCSpriteFrame frameWithTexture:texture rectInPixels:CGRectMake(0, 0, 75, 70) rotated:NO offset:CGPointZero originalSize:CGSizeMake(75, 70)];
self.dragon=[CCSprite spriteWithSpriteFrame:frame3];
_dragon.position=ccp(winSize.width/2,winSize.height/2);
self.flyAction=[CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:flyAnim]];
[_dragon runAction:_flyAction];
[spriteSheet addChild:_dragon];

有什么问题吗?

【问题讨论】:

    标签: xcode cocos2d-iphone


    【解决方案1】:

    在你的循环中,行:

    [animFrames addObject:[CCSprite spriteWithTexture:spriteSheet.texture rect:CGRectMake(i*75, 0, 75, 70)]];
    

    您应该添加 CCSpriteFrame 对象而不是 CCSprite。当动作运行时,动作管理器认为这些是 spriteFrame 对象并向它们发送该类的消息。

    习惯上在 .plist 文件中声明精灵帧,比如说“dragon.plist”。 plist 可以使用 zwoptex、texturePacker 或类似工具创建(vi 可以正常工作)。然后你可以这样做:

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"dragon.plist"];
    NSMutableArray *frames = [NSMutableArray arrayWithCapacity:numberOfFrames];
    for (NSUInteger i = 1; i <= 8; i++) {
        NSString *frName = [NSString stringWithFormat:@"dragon%i.png",i];
        CCSpriteFrame *frr = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:frName];
        if (frr) {
            [frames addObject:frr];
        } else {
            MPLOGERROR(@"*** No frame named [%@], bailing out.", frName);
            return nil;
        }
        [frames addObject:frr];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      相关资源
      最近更新 更多