Cocos2d:预加载动画会导致崩溃

时间:2011-01-28 14:15:54

标签: cocos2d-iphone

我正在尝试在我的图层的init方法中预加载动画。然后,如果触摸屏幕,我会调用动画。一旦我触摸屏幕,应用程序崩溃,没有错误消息,似乎与调用预加载的动画有关。我想这样做,因为每次触摸屏幕时创建动画似乎都很昂贵 - 这似乎确实有效。任何提示都非常感激。

示例代码:

在我的标题中:

@interface Test : CCLayer {
   NSMutableArray *wake;
   CCSprite* ani;
   CCAnimate *animate;
}
@end

在我的实施中:

    -(id) init {
        if( (self=[super init])) {      
    // enable touches
    self.isTouchEnabled = YES;

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"ani.plist" texture:[[CCTexture2D alloc] initWithImage:[UIImage imageNamed:@"ani.png"]]];
            ani = [CCSprite  spriteWithSpriteFrameName:@"ani1.png"]; //comes from .plist file
            ani.anchorPoint=ccp(0,0);
            ani.position = ccp(700,65); 
            [self addChild:ani z:30];

    wake = [NSMutableArray array];
            for(int i = 1; i <= 4; i++) {
                [wake addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"ani%d.png",i]]];
            }
            animate = [CCAnimate actionWithAnimation:[CCAnimation animationWithFrames:wake delay:1.0f] restoreOriginalFrame:FALSE];

        }
        return self;                                                   
    }

处理触摸:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
// run the animation
   [ani runAction:animate];
}

3 个答案:

答案 0 :(得分:0)

Cocos2d中的动画不能重复使用。你需要每次都创建一个新的。

答案 1 :(得分:0)

通过使用nonatomic,retain。

在类上创建数组和动画的属性来解决问题

答案 2 :(得分:0)

您只需保留动画,但阵列可以是本地的。

self.myAnimation = [[CCAnimation animationWithFrames:myAniFramesArray delay:0.1f] retain];

请记住使该属性非原子化,保留Chev所述并释放您在相应的dealloc方法中保留的任何对象。