2012-10-25 21 views
1

我正在使用Cocos2d在iPad應用程序中創建動畫。CCSequence導致應用程序在給出太多CCA時耗盡內存

在應用程序中,用戶可以創建一系列動畫並選擇該序列重複的次數。由於不相關的原因,我選擇將每個動作分成許多小動作 - 即如果用戶選擇移動100pts,則將其移動100p,然後移動2pts。這可能會導致非常大的CCSequence數組。

我發現創建一個約16k CCAction的序列導致應用程序崩潰。這是預期的行爲?有誰知道實現這種效果的解決方法,還是我需要結束運動的分裂?

謝謝!

編輯:這是一個屏幕截圖,描述了我想要實現的效果以及我分割動畫的原因。 enter image description here

+0

呃,這聽起來非常浪費。你爲什麼要一次移動物體2點?如果你需要這個,爲什麼不用更新方法來調整它,調整位置?這效率更高。 – LearnCocos2D

+0

@ LearnCocos2D我有一個功能,當一個對象移動時,你可以切換是否在它後面畫一條線。該線需要準確地跟隨移動(所以如果移動4,關閉線,移動4,重複它將看起來像均勻虛線)。該線還需要與運動同步 - 意思是我不能只是事先指定線並將其繪製。我無法達到我想要的小距離的精確度,除非動畫和線條一前一後移動 - 所以移動2,畫第2行等任何建議? –

回答

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]; 
    } 


} 
+0

謝謝拉吉,很高興知道。我認爲我遇到的問題稍有不同,因爲它與CCSequence溢出(發生在我擁有太多CCAction對象之前)有關。 –

+0

@SamanthaJohn,確定更新了我的答案...根據LearnCocos2D的建議問題:) – Guru