0

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

何か間違っていることでも?

4

1 に答える 1

3

あなたのループでは、行:

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

CCSprite の代わりに CCSpriteFrame オブジェクトを追加する必要があります。アクションが実行されると、アクション マネージャーはこれらが 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];
}
于 2012-11-23T11:29:42.737 に答える