在cocos2d,box2d和Xcode中对精灵进行动画处理

问题描述

|| 请,我需要帮助使此代码正常工作。我打算用在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