1

Box2D 物理演算を使用した Cocos2D ゲームがあります。私の GameScene.mm では、特定のスケールにズームする方法に取り組んでいます。

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

    currentZoomLevel = zoom;
}

私が抱えている問題は、(シーンの update() メソッドで使用される) currentZoomLevel がすぐにズームに設定され、アニメーションに従って徐々に調整されないことです。したがって、アニメーションの進行中は currentZoomLevel 変数が完全に間違っています。

currentZoomLevel 変数をアニメーションの進行状況と一致させる方法を見つけようとしています。CCAction API Reference によると、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 をサブクラス化する必要がありますか?

4

2 に答える 2

1

スケールがアニメーション化されると、スケールに直接アクセスできるはずです。

それ以外の float progress = [action getProgress];

試す float current_scale = some_node.scale ;

ここで、「some_node」はアニメーション化/スケーリングしているものです。

于 2011-08-22T02:21:00.553 に答える
0

実際、最善の策は、新しいCocos2D拡張機能「CCLayerPanZoom」を使用することです。これは、これらすべてをすばらしい方法で処理します。これは、新しいcocos2Dインストール(v.1.0以降)の一部である必要があります。

于 2011-12-13T13:50:25.897 に答える