如果给出太多CCAction,CCSequence会导致app耗尽内存

时间:2012-10-25 22:43:34

标签: ios cocos2d-iphone

我正在使用Cocos2d在iPad应用中创建动画。

在应用程序中,用户可以创建一系列动画,并选择该序列重复的次数。出于无关的原因,我选择将每个动作分成许多小动作 - 即如果用户选择移动100分,她将改为移动2分100次。这可能会导致非常大的CCSequence数组。

我发现创建一个大约16k CCActions的序列会导致应用程序崩溃。这是预期的行为吗?有没有人知道实现这种效果的解决方法,还是我需要结束运动的分裂?

谢谢!

编辑:这是一个截图,描述了我想要实现的效果以及我分割动画的原因。 enter image description here

1 个答案:

答案 0 :(得分:0)

typedef enum Actor_STATE{
    kState_MovingLeft = 14001,
    kState_MovingRight
}ActorState;


@interface HorseRider : CCSprite
{
    ActorState mState;
    float mMoveSpeed;
}
@property(nonatomic, assign) ActorState     state;

//implementation of HorseRider

-(void)updateRider
{
    CGPoint pos = self.position;

    if(self.state == kState_MovingLeft)
    { 
        pos.x -= mMoveSpeed;

        if(pos.x>screenWidth)
        {
           state = kState_MovingRight; 
           continue;
        }
    }
    else 
    { 
       pos.x += mMoveSpeed;

        if(pos.x>0.0f)
        {
           state = kState_MovingRight; 
           continue;
        }

        [self createTrackDots];

    }

    self.position = pos;
}

-(void) createTrackDots
{
   if(ABS(lastDots.x - self.position.x) > MIN_DOT_DISTANCE)
   {
      [self createDotsAtPos: self.position]; 
   }
}


//Game init
-(id)init
{
    …
    hero = [HorseRider spriteWithSpriteFrameName:FRAME_NAME];
    hero.state = kState_MovingLeft;
    ….
    [self schedule: @selector(tick:)];
}


-(void) tick: (ccTime) dt
{    
   if(self.isGamePaused || self.isGameOver )
    {
        [hero updateRider];
    }


}