0

cocos2dを使用してobjective-cでiphoneアプリを作成しています。以下のコードでは、衝突を検出してからアニメーションを実行しようとしています。(box1はタッチで移動します)

「[selfgetChildByTag:d]」と「box1」が衝突して重なると、「JUMPNOW!」が表示されます。表示されますが、ジャンプ自体は取得されませんが、box1を「[selfgetChildByTag:d]」から移動すると、ジャンプが発生します。

これはおそらくアクションが何度も呼び出されるという事実に関係していると理解していますが、何が起こっているのかを正確に説明し、解決策を手伝ってください!

- (void)update:(ccTime)dt { 
    for (int d = lowestAvailableTag; d <= highestAvailableTag; d++) {
      if ([self getChildByTag:d].position.y < (box1.position.y+45)&&             
          [self getChildByTag:d].position.x > (box1.position.x-45) && 
          [self getChildByTag:d].position.x < (box1.position.x+45) ) {

          NSLog(@"JUMP NOW!");

          if ([self getChildByTag:d].position.x < 150) {
             [[self getChildByTag:d] runAction:
              [CCJumpTo actionWithDuration:1.5 
                        position:ccp(240, 140) height:110 jumps:1]];
          }
      }
   }
}

//アルバ

4

1 に答える 1

0

ジャンプが発生したかどうかを検出するために、BOOLフラグを追加できます。のようなSmth:

- (void) update:(ccTime)dt
{
    if( jumpOccured == false )
    {
        BOOL needToJump = // your jump condition
        if( needToJump == true )
        {
            // your jump code

            jumpOccured = true;
        }
    }
}

ちなみに、衝突の可能性が多い場合は、box2dを使用してそれらを検出できます

于 2012-04-11T22:08:58.747 に答える