我正在尝试在我的图层的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];
}
答案 0 :(得分:0)
Cocos2d中的动画不能重复使用。你需要每次都创建一个新的。
答案 1 :(得分:0)
通过使用nonatomic,retain。
在类上创建数组和动画的属性来解决问题答案 2 :(得分:0)
您只需保留动画,但阵列可以是本地的。
self.myAnimation = [[CCAnimation animationWithFrames:myAniFramesArray delay:0.1f] retain];
请记住使该属性非原子化,保留Chev所述并释放您在相应的dealloc方法中保留的任何对象。