2012-02-21 78 views
0

我在一個序列中有一個簡單的CCRotateBy動作;它後面是另一個方法的調用它證實了CCRotateBy完成(否則,CCCallFunc不會被調用的順序,如果CCRotateBy沒有完成):CCRotateBy沒有完成

-(void)correctRotation{ 
    if (self.rotationAmount){ 
    CCLOG(@"correcting rotation inside: %i",self.buildNum); 
    CCRotateBy*second=[CCRotateBy actionWithDuration:1 angle:-self.rotationAmount]; 
    CCEaseBackInOut*bounce2=[CCEaseBackInOut actionWithAction:second]; 
    CCCallFunc*func=[CCCallFunc actionWithTarget:self selector:@selector(stabilize)]; 
    CCSequence*seq=[CCSequence actions:bounce2,func, nil]; 
    [self runAction:seq]; 
    } 
} 

-(void)stabilize{ 
     CCLOG(@"stabilize before rotation: %i for %i",self.rotationAmount,self.buildNum); 
    self.rotationAmount=0; 
     CCLOG(@"stabilize after rotation: %i for %i",self.rotationAmount,self.buildNum);  
} 

的CCLOG語句確認旋轉應該發生,並且旋轉的角度不是零(它總是一個整數)。這些日誌還顯示CCSequence正在完成。但是,精靈不在屏幕上旋轉。我一直在努力研究這個代碼幾個小時,試圖找出可能出錯的地方。如果精靈的動作被停止,那麼這3個日誌語句就不會完成,對嗎?

+0

怪......嗯,有過類似的一個過去與另一間隔動作(科科斯版本99.4的時候)。你是否試圖'搖動'系統並嘗試CCRotateTo self.rotation + self.rotationAmount?那爲我修好了... – YvesLeBorg 2012-02-21 04:50:46

+0

我不知道CCSprite有一個旋轉屬性;它不在課堂參考中。這應該是精靈的旋轉角度? – johnbakers 2012-02-21 11:49:00

+1

CCSprite像cocos中的大多數(所有?)對象都從具有旋轉屬性的CCNode派生。我只是做了一個快速測試,它是可以設置的。此外(這聽起來可能很愚蠢)你有沒有證實self.isRunning是真的? – YvesLeBorg 2012-02-21 13:40:56

回答

1

正如@tassinari說,嘗試刪除反彈功能。

這是從cocos2d的API參考

http://www.cocos2d-iphone.org/api-ref/1.1.0/interface_c_c_ease_back_in_out.html

Warning: 
This action doesn't use a bijective function. Actions like Sequence might have an 
unexpected result when used with this action. 
+0

有用,謝謝,但不是問題的原因。我拿出了緩和動作,只用直線旋轉動作,但問題仍然存在,並且相同 – johnbakers 2012-02-21 04:03:28

+0

何時調用correctRotation函數?我只是在我的項目上測試了一個類似的代碼並且工作正常,所以也許問題出在你調用函數的時候。你確定rotateAmount> 0嗎?只需確保一個固定的號碼就可以了。 – Setrio 2012-02-21 11:39:54

0

快速查看,但你沒有在你的序列中調用CCRotateBy。 '第二'行動不在序列中。

+0

對不起,剛剛看到它在你的反彈動作中,也許在你調試時刪除了緩進/退出。 – tassinari 2012-02-21 03:30:12