Я пытаюсь предварительно загрузить анимацию в методе init моего слоя. Затем я вызываю анимацию, если экран коснулся. Приложение вылетает без сообщения об ошибке, как только я касаюсь экрана, и, похоже, это связано с вызовом предварительно загруженной анимации. Я хотел бы сделать это таким образом, так как кажется, что создавать анимацию каждый раз, когда экран тронут, кажется дорогим, что, похоже, работает. Любые советы очень ценятся.Cocos2d: Предварительная загрузка анимации вызывает сбой
Пример кода:
В моем заголовке:
@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;
}
Handling прикосновение:
- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
// run the animation
[ani runAction:animate];
}
. Нужно ли вам каждый раз загружать массив? неужели это должно быть хитом производительности? – Chev
Вы можете кэшировать массив следа, но вам нужно вызвать animate = [CCAnimate actionWithAnimation: [CCAnimation animationWithFrames: wake delay: 1.0f] restoreOriginalFrame: FALSE]; каждый раз. – badgerr