动画崩溃程序COCOS2D

时间:2013-02-11 04:11:29

标签: iphone objective-c xcode animation cocos2d-iphone

我试图用cocos2d制作游戏。我有他们的版本之前他们抄袭ccspritesheet和所有这些东西。我试图让一艘船爆炸。它是一个ccsprite,我在 - (id)init

中运行此代码
        CCSpriteSheet * sheet = [CCSpriteSheet spriteSheetWithFile:@"Explode.png"];

    [self addChild:sheet];

    NSMutableArray * explosionFrames = [NSMutableArray array];

    int spriteWidth = 256;

    for (int i = 0; i <= 6; i++) {
        [explosionFrames addObject:[CCSprite spriteWithSpriteSheet:sheet rect:CGRectMake(i*spriteWidth, 0, spriteWidth, 100)]];
    }

    CCAnimation * animation = [CCAnimation animationWithName:@"explode" delay:0.1f frames:explosionFrames];

    CCAnimate * explosion = [CCAnimate actionWithDuration:.5f animation:animation restoreOriginalFrame:NO];

    [self runAction:explosion];

当我运行该程序时,它只是直接崩溃说

-[CCSprite rect]: unrecognized selector sent to instance 0x54484f0

在控制台中。

我不知道最近发生了什么。这是我第一次尝试在科科斯制作动画,我可能是个白痴。任何帮助几乎和你一样棒。谢谢!

我无法上传使用的精灵表,因为我是新的,它不会让我,这是有道理的。但它是一个1792×100 png

1 个答案:

答案 0 :(得分:0)

已弃用的 CCSpriteSheet 已被 CCSpriteBatchNode 取代。但无论如何要从spritesheet的rect中创建一个sprite,你应该调用[CCSprite spriteWithTexture:sheet.texture rect:yourRect],其中sheet是你的 CCSpriteBatchNode

以下代码适用于cocos2d 2.x.有关使用cocos2D中的spritesheets进行动画制作的精彩教程,请查看:http://www.raywenderlich.com/1271/how-to-use-animations-and-sprite-sheets-in-cocos2d

    // Create a batchnode from your spritesheet file
    CCSpriteBatchNode *sheet = [CCSpriteBatchNode batchNodeWithFile:@"Explode.png"];
    [self addChild:sheet];

    int spriteWidth = 256;

    // Create the sprite starting with the first frame.
    CCSprite *sprite = [CCSprite spriteWithTexture:sheet.texture rect:CGRectMake(0, 0, spriteWidth, 100)];
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    sprite.position = ccp(winSize.width/2, winSize.height/2);

    // Create the array the holds the animation frames
    NSMutableArray * explosionFrames = [NSMutableArray array];
    for (int i = 0; i <= 6; i++)
    {
        [explosionFrames addObject:[CCSpriteFrame frameWithTexture:sheet.texture rect:CGRectMake(i*spriteWidth, 0, spriteWidth, 100)]];
    }

    // Create the animation from those frames.
    CCAnimation * animation =[CCAnimation animationWithSpriteFrames:explosionFrames delay:.2f];
    CCAnimate * explosion = [CCAnimate actionWithAnimation:animation];

    // Start running the animation
    [sprite runAction:explosion];

    // Add the explosion as child of spritesheet
    [sheet addChild:sprite];