私は自分のゲームの衝突を完全に完璧にしようとしています。私がテストしていることは、あなたがプレイヤーと壁を打つと、止まってしまうことです。私は、プレーヤーが壁の左側に当たったとき(壁がプレーヤーの右側にあるとき)の衝突コードを実装しました。ここにコードがあります。LibGdx Javaで完璧な衝突が発生しました
if(entityOnRight){
if(player.getPositionCorner(SquareMapTuples.BOTTOM_RIGHT).x -
ent.getPositionCorner(SquareMapTuples.BOTTOM_LEFT).x > -.9f)
player.setMovementBooleans(false, false, false, false);
else
player.setMovementBooleans(true, false, false, false);
}
注:私は非常に遅い行く場合、それは私がそれを停止することを望むプレイヤーを停止しますが、高速で行く、それが衝突私は基本的に
を望むようにしないだろうコードは、壁が右側にある場合はプレーヤの四角形の右下隅をチェックし、壁の左下隅を引いて、2つの間の距離が0.001であるかどうかを確認します。 0.001はほとんど目立たない距離なので、なぜ私はその値を使用したのですか?ここでplayer.setMovementBooleans
public void setMovementBooleans(boolean canMoveRight, boolean canMoveLeft, boolean canMoveUp, boolean canMoveDown){
this.canMoveRight = canMoveRight;
if(canMoveRight == false && moveRight)
vel.x = 0;
}
のコードは(ないパラメータで)Player
クラスのcanMoveRight
ブール値であるあなたが右に移動しようとしているときmoveRight
は、あなたが移動できるようにすることができますものです。
//If you clicked right arrow key and you're not going
//Faster then the max speed
if(moveRight && !(vel.x >= 3)){
vel.x += movementSpeed;
}else if(vel.x >= 0 && !moveRight){
vel.x -= movementSpeed * 1.5f;
System.out.println("stopping");
//Make sure it goes to rest
if(vel.x - movementSpeed * 1.5f < 0)
vel.x = 0;
}
と::
if(Gdx.input.isKeyPressed(Keys.D) && canMoveRight)
moveRight = true;
else
moveRight = false;
ので、概要を与えるために、あなたは「D」キーをクリックすると、それが移動を開始することができますここでは、より良いこれらのブール値がどのように相互作用するかを説明しますいくつかのコードがあります。しかし、ブール値canMoveRight
がfalseの場合、移動しません。ここでは何が起こるかを示す画像であるあなたが見ることができるように、プレイヤーは、私はそれがしたいその後、更に多くなっ
(プレイヤーが黄色で、壁は緑です)。それはこの時点で停止する必要があります
これを実現する方法を考え出すとすべてのヘルプは非常に感謝されます!
はい.overLapsメソッドは – Luke
を求める部分ですので、あなたの質問に答えましたか? – WonderfulWorld
申し訳ありませんが、私はオーバーラップが実際に組み込まれたメソッドであることを認識しませんでした – Luke