2011-08-22 28 views
1

我有一個Box2D物理的Cocos2D遊戲。在我GameScene.mm,我工作的一種方法放大到給定規模:Cocos2D獲得CCAction的進展

-(void) zoomToScale:(float)zoom withDuration:(ccTime)duration 
{ 
    id action = [CCScaleTo actionWithDuration:duration scale:zoom]; 
    [scrollNode runAction:action]; 

    currentZoomLevel = zoom; 
} 

說我遇到的問題是,currentZoomLevel(這是在場景的更新中使用()方法)是立即設置爲變焦,並且不按照動畫逐漸調整。所以在動畫進行過程中,currentZoomLevel變量是完全錯誤的。

我試圖找出一種方法讓currentZoomLevel變量與動畫的進度匹配,因爲它發生了。根據CCAction API參考,CCAction的update方法根據動畫的進度採用0到1之間的ccTime(0剛剛開始,1剛剛完成)。

如何從動作之外訪問此ccTime?我想在我的場景的更新方法是這樣的:

if(animating) 
{ 
    float progress = [action getProgress]; // How do I do this? 

    // Do math to update currentZoomLevel based on progress 
} 

我失去了一些東西很明顯這裏,還是我將不得不繼承CCScaleTo?

回答

1

您應該能夠在動畫時直接訪問比例尺。

代替 float progress = [action getProgress];

嘗試 float current_scale = some_node.scale ;

其中 「some_node」 是你動畫/縮放的東西。

0

其實,你最好的選擇是使用新的Cocos2D擴展「CCLayerPanZoom」,它爲你處理所有這些奇妙的事情!它應該是任何新的cocos2D安裝(v.1.0 +)的一部分。