问题描述
||
请,我需要帮助使此代码正常工作。我打算用在xcode中使用cocos2d和Box2d添加的精灵来制作动画。但是出于某些奇怪的原因,我无法让精灵重复进行动画处理。
这段代码可以成功构建,但是只能动画一次。谁能帮我告诉我我做错了吗?
实现文件如下:
#import \“ Mosquito.h \”
#import \“ Box2DHelpers.h \”
@implementation Mosquito
@synthesize flyingAnim;
- (void) dealloc{
[flyingAnim release];
[super dealloc];
}
-(void)initAnimations {
flyingAnim = [self loadplistForAnimationWithName:@\"flyingAnim\"
andClassName:NsstringFromClass([self class])];
[[CCAnimationCache sharedAnimationCache] addAnimation:flyingAnim
name:@\"flyingAnim\"];
}
-(void)changeState:(CharacterStates)newState {
[self stopAllActions];
id action = nil;
// id flyingAction = nil;
//CGPoint newPosition;
[self setCharacterState:newState];
switch (newState) {
case kStateIdle:
[self setdisplayFrame:
[[CCSpriteFrameCache sharedSpriteFrameCache]
spriteFrameByName:@\"Mosquito_anim_1.png\"]];
break;
case kStateFlying:
action = [CCAnimate actionWithAnimation:flyingAnim
restoreOriginalFrame:NO];
break;
case kStateTakingdamage:
action = [CCBlink actionWithDuration:1.0 blinks:3.0];
break;
default:
//cclOG(@\"Unhandled state %d in Mosquito\",newState);
break;
}
if (action != nil) {
[self runAction:action];
}
}
- (id)initWithWorld:(b2World *)theWorld atLocation:(CGPoint)location {
if ((self = [super init])) {
world = theWorld;
[self setdisplayFrame:[[CCSpriteFrameCache
sharedSpriteFrameCache]
spriteFrameByName:@\"Mosquito_anim_1.png\"]];
gameObjectType = kMosquitoType;
characterHealth = 100.0f;
[self createBodyAtLocation:location];
[self initAnimations];
}
return self;
}
- (void) updateStateWithDeltaTime:(ccTime)deltaTime
andlistofGameObjects:(CCArray *)listofGameObjects {
//CGPoint oldPosition = self.position;
if ((characterState == kStateDestroyed) &&
([self numberOfRunningActions] > 0)) {
return;
}
if (characterState != kStateFlying &&
[self numberOfRunningActions] == 0) {
[self changeState:kStateFlying];
}
}
@end
谢谢。
解决方法
id repeatAnimation = [CCRepeatForever actionWithAction:action];
要永远重复,您需要这样做,否则,您只需做以下事情:
[self runAction:action];
再次。
另外,您可能要考虑不要将动作重新分配给CCBlink并进行其他动作并致电
[self stopAllActions];
id blinkAction = [CCBlink actionWithDuration:1.0 blinks:3.0];
[self runAction:blinkAction];
, 这可能对您有帮助。
Sprite动画最简单的方法之一。
https://sites.google.com/site/rajanallathambi1/cocos2d-tutorials/sprite-animation-without-plist-file