0

私が現在使用しているコレクション検出方法は、衝突を解釈できますが、方向によっては奇妙な効果を引き起こします。そうなる:

  • プレイヤーがオブジェクトの右側を叩いている場合は常に機能します。
  • プレーヤーがオブジェクトの上部または下部にぶつかっている場合は、プレーヤーを横に押します。
  • プレイヤーがオブジェクトの左側にぶつかった場合に初めて機能しますが、次に左側で衝突が検出されたときにプレイヤーをオブジェクトの反対側にテレポートします。

これは現在の衝突検出コードです:

if(player.playerBounds.intersects(portal.bounds)&&player.isMovingLeft){
       player.playerX=(portal.x+portal.width);
       player.playerX++;
    }
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingRight){
        player.playerX=(portal.x-player.width);
        player.playerX--;
    }
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingUp){
        player.playerY=(portal.y+portal.height);
        player.playerY--;
    }
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingDown){
        player.playerY=(portal.y+player.height);
        player.playerY++;
    }
4

2 に答える 2

0

ここで私自身の質問に答えます。進行方向のフラグが true から変更されることはありませんでした。これが問題の原因でした。私が通常移動する最初の方向と並んでいたので、1つの方向は正常でした.

于 2013-03-22T02:17:35.847 に答える
0

次のコードを試して、動作するかどうかを確認できますか?

bool collide = player.playerBounds.intersects(portal.bounds);

if(collide && player.isMovingLeft){
   player.playerX = (portal.x + portal.width) + 1;
}
else if(collide && player.isMovingRight){
    player.playerX = (portal.x - player.width) - 1;
}
else if(collide && player.isMovingUp){
    player.playerY = (portal.y + portal.height) + 1;
}
else if(collide && player.isMovingDown){
    player.playerY = (portal.y + player.height) - 1;
}

考えられる理由は次のとおりです。

  • 衝突を複数回チェックしています。
  • プレイヤーを動かすことは、移動の方向を変えることです。
  • 他のコードがこのコードと競合しています。
  • isMovingX が正しく動作していません。
于 2013-03-18T02:31:06.867 に答える