Я новичок в использовании CCAnimations
в cocos2D, и у меня возникла проблема, с которой мне было трудно решить проблему.EXC_BAD_ACCESS при переключении CCAnimations
Я делаю базовую платформерную игру, а игровой спрайт имеет различные анимации, которые нужно запускать в зависимости от состояния плеера.
У меня есть следующий код в init
методе моего слоя:
sprite = [CCSprite spriteWithSpriteFrameName:@"stand.png"];
standingSprites = [NSArray arrayWithObjects:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"stand.png"],
nil];
runningSprites = [NSArray arrayWithObjects:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"run1.png"],
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"run2.png"],
nil];
standingAnimation = [CCAnimation animationWithFrames:standingSprites delay:0.2f];
runningAnimation = [CCAnimation animationWithFrames:runningSprites delay:0.2f];
animationAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:standingAnimation]];
[sprite runAction:animationAction];
Это работает, как ожидается, либо из двух анимаций. Тем не менее, я хочу запустить standingAnimation
, когда игрок стоит на месте и runningAnimation
, когда игрок работает. Я попытался сделать это следующим образом:
-(void)walk {
if(!isWalking) {
isWalking = true;
[sprite stopAction:animationAction];
animationAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:runningAnimation]];
[sprite runAction:animationAction];
}
}
Второй до последней строки происходит сбой программы, в результате чего EXC_BAD_ACCESS
(на ссылки 0x0
). Выбрав в отладчике walk
, не видно, что любой из соответствующих указателей имеет значение NULL.
Из трассировки стека:
2012-06-03 10:59:59.907 ThirtyMinutes[9876:6403] *** Terminating app
due to uncaught exception 'NSInvalidArgumentException', reason:
'-[NSCTFontDescriptor frames]: unrecognized selector sent to instance
0x7f808d93e9f0'
0x7f808d93e9f0
это адрес runningAnimation
.
- Что я делаю неправильно?
- Есть ли лучший способ сделать это?
Спасибо!
Вызов сохранения на анимации исправил его. Благодаря! – jonmorgan