2012-10-20 87 views
0

我創建了一個CCAnimation,如下所示。我試圖將延遲降低到.05f以下,動畫現在無法完成!它只有8幀。我不知道我是否做錯了什麼。起初我以爲這是內存泄漏,我失去了行動,所以我把它分配給一個強大的屬性來測試,並且仍然這樣做。我不確定延遲會如何導致我的動畫無法完成。我在模擬器中以每秒60幀的速度運行。CCAnimation低延遲沒有完成

使用狗頭2.0.4

誰能幫助?

else if([model currentState] == PROCESSING_FIRST_ACTION) 
     { 
      CCDirector* director = [CCDirector sharedDirector]; // process model 
      //Get the top left corner of the screen 
      int screen_height = director.screenSizeAsPoint.y; 
      int screen_width = director.screenSizeAsPoint.x; 

      id attacker = [model attacker]; 
      id attackChoice = [attacker getRegisteredAttack]; 

      CCAction* attack = [model.resourceManager animation: @"simple-attack-frame"]; 
      CCSprite * attackSprite = [model.resourceManager sprite: @"simple-attack-frame-01"]; 

      attackSprite.position = ccp(screen_width - rxa(80), screen_height - rya(80)); 
      attackSprite.tag = 5; 
      self.action = attack; 

      CCNode * check = [self getChildByTag:5]; 

      if(check == nil) 
      { 
       [self addChild: attackSprite]; 
       [attackSprite runAction:attack]; 
      } 
     } 

resource manager: 

-(id)animation: (NSString*)_resource 
{ 
    NSMutableArray *frames = [NSMutableArray array]; 

    for(int i = 1; i <= 8; ++i) 
    { 
     [frames addObject: 
     [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: 
      [NSString stringWithFormat:@"%@-0%d", _resource, i]]]; 
    } 

    CCAnimation *animation = [CCAnimation animationWithSpriteFrames: frames delay:1/60]; 

    CCAction * action = [CCAnimate actionWithAnimation: animation]; 

    return action; 

} 
+1

我見過這樣的問題,但在cocos2d v1.1。他們在動畫系統中改變了一些東西,我並沒有真正理解代碼,這對我來說似乎打了折扣。結果是時機關閉了,有時動畫根本沒有播放。我不知道這個改變是否已經整合到2.0。您可能想嘗試在vanilla cocos2d 2.0項目中重新創建場景,然後提交錯誤報告。 – LearnCocos2D

+0

哦,這不好。我的意思是,如果我無法獲得動畫在遊戲中工作,那是一個遊戲突破bug =(。 – AwDogsGo2Heaven

+1

動畫由ActionManager停止,因爲流逝的時間大於持續時間(isDone)。但我認爲最簡單的解決方案是隻有在顯示最後一幀後纔會使isDone過載 – AwDogsGo2Heaven

回答

1

在你行

CCAnimation *animation = [CCAnimation animationWithSpriteFrames: frames delay:1/60]; 

你延遲設置爲1/60,但因爲1和60都是整數,所以1/60是0.嘗試使用1.0f/60.0f,您將得到浮點除法。

+0

這是正確的,我注意到不久之後......並且它確實有效,除非幀速率下降然後在動畫未完成的情況下返回相同的問題。 – AwDogsGo2Heaven