1

私は Cocos2D を初めて使用し、問題に行き詰まっています。私もよく検索しましたが、私の問題に対する答えが見つからないようです。状況は次のとおりです。

ゲームが開始されると、メイン スプライトはダウンし続ける必要があります (プラン クラッシュのように)。ユーザーが画面のどこかをタッチすると、スプライトはタッチしたポイントの Y 座標まで移動し、スプライトがそのポイントに到達すると、そのポイントから再び下降を開始する必要があります。飛行機が墜落 (下降) し、ユーザーがどこかをタップすると上昇 (少し離陸) し、再び下降を開始するとします。地面に衝突させる必要はありません。

ということで、下りパートを達成しました。上りの部分も。しかし問題は、スプライトが上昇を完了したときに、そこから下降し始めるのではなく、上昇したところから下降し続けることです。

この目標を達成するのを手伝ってください。

init()メソッドでダウンするための私のコードは次のとおりです。

 [plane runAction:[CCRepeatForever actionWithAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,-20)],
                                                       nil]]];

メソッドで上に行くためのコードtouchesBegan:

  [plane runAction:[CCMoveBy actionWithDuration:1 position:ccp(0,20)]];
4

1 に答える 1

1

問題は、繰り返し可能なアクションを使用し、「上に移動」アクションを適用すると、両方のアクションが同じオブジェクトで機能するため、矛盾が生じることです (前のアクションがキャンセルされたかどうかは覚えていませんが、このアプローチは機能しません)。

だから私は次のようにしますinit()

.
.
[self startDownMovement];
.
.

次に、次のように実装startDownMovement()します。

[plane runAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,-plane.potision.y)],
                                     [CCCallBlock actionWithBlock:
                                     ^{
                                           // Do game over logic. (i.e. plain crashed)
                                      }],nil]];

そしてのためにtouchBegan()

 [plane stopAllActions];
 CGPoint location = [touch locationInView:touch.view];
 [plane runAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,location.y)],
                                      [CCCallBlock actionWithBlock:
                                      ^{
                                           [self startDownMovement];
                                      }],nil]];

ここで行ったことは、下への移動を開始することです (y=0 がクラッシュ ポイントであると仮定します)。そのため、スプライトをその y 位置を引いた分だけ移動します。

ユーザーが画面に触れると、平面の y 位置がタッチ ポイントに移動し、その後、下への移動が再度呼び出されます (CCSequence を使用したため、下への移動は上への移動が終了した後にのみ発生します)

于 2013-02-17T14:18:48.077 に答える