0

box2d ワールドで 2 つのアクション シーケンスでカメラを動かそうとしています。目的は、カメラがパンするときにユーザーがゲーム空間全体を見ることができるスムーズなトランジションを実現することです。最初のシーケンスには、短い遅延アクションとそれに続くカメラを右から左に移動するアクションが含まれています。2 番目のシーケンスには、同じ短い遅延アクションが含まれており、その後にズームアウトするアクションとズームインするアクションが続きます。ズームアウトとズームインの合計時間は、パン アクションと同じです。残念ながら、両方のシーケンスのアクションは一致しません。代わりに、1 つのシーケンスの一部が実行され、次に他のシーケンスの一部が実行され、最後にシーケンスの最後の部分で同期された方法で実行されます。以下は私が使用しているコードです:

[self runAction:
         [CCSequence actions:
          [CCDelayTime actionWithDuration:0.5],
          [CCMoveBy actionWithDuration: 1.0f
                              position:ccp(-lastXPositionForCamera, 0)],
          [CCCallFunc actionWithTarget:self
                              selector:@selector(startOver)],
          nil]];

// Run a second action at the same time.
// This second action will cause the camera to zoom out and then back in
[self runAction:
     [CCSequence actions:
      [CCDelayTime actionWithDuration:0.5],
      [CCScaleTo actionWithDuration: 0.5f scale:0.5f],
      [CCScaleTo actionWithDuration: 0.5f scale:1.0f], nil]];

すると、次のようになります。わずかな遅延があり、その後カメラがズームアウトします。カメラがズームアウトした後、カメラは右から左にパンし始め、同時にズームインします。

最初の CCDelayTime を 0.4 に変更すると、動作が少し異なります。この場合、カメラは少し遅れて右から左にパンし始めます。次に、カメラがズームアウトしている間、パンが停止します。最後に、カメラは右から左へのパンを再開し、同時にズームインします。

上記のコードに問題がなければ、ズーム操作とパン操作の両方からなるスムーズな移行を行うためのより良い方法はありますか?

4

1 に答える 1

0

2つのアクションの問題を解決するものではありませんが、あなたの場合はうまくいきます...

遅延後に CCSpawn を使用して、パンとズームのアクションを 1 つのアクションで呼び出すことができます。それを試してみてください:

[self runAction:
     [CCSequence actions:
      [CCDelayTime actionWithDuration:0.5],
      [CCSpawn actions:
       [CCSequence actions:
        [CCMoveBy actionWithDuration: 1.0f
                          position:ccp(-lastXPositionForCamera, 0)],
        [CCCallFunc actionWithTarget:self
                          selector:@selector(startOver)],
        nil],
       [CCSequence actions:
        [CCScaleTo actionWithDuration: 0.5f scale:0.5f],
        [CCScaleTo actionWithDuration: 0.5f scale:1.0f], nil]
       ,nil] ,nil];
于 2013-07-08T20:48:15.543 に答える