4

したがって、基本的には、2 つの Rectangle 間で適切な衝突を行う方法を見つけようとしています。検出は問題ではありませんが、長方形がクリップし始めます。位置をリセットしたいのですが、どうすればいいですか?dx と dy を使用してリセットしようとしていますが、正しい座標にリセットされません。

http://i.stack.imgur.com/IU6sK.png (申し訳ありませんが、まだ画像を使用できません)

System.out.println(this.y + this.h + " " +  e.getY());
if(this.y + this.h >= e.getY())
{
    if(this.dy > 0)
    {
        this.y -= delta * this.dy + 0.1; 
        this.dy = 0;
    }
    else 
    {
        this.y += delta * this.dy;
        this.dy = 0;
        this.inAir = false;
    }
}

このコードは、私がどのように試しているかを示すための単なる例です。(this = 白い Rectangle と e = オレンジ色の Rectangle) Rectangle を拡張するクラス Entity を使用しました。

これを呼び出す前に交差点をチェックしています。これは「白い」エンティティの関数であり、交差はメイン ループの更新関数でチェックされます。

これを使用すると、長方形の間に1pxほどあります。何か案は?助けてくれてありがとう:)

4

2 に答える 2

3

http://docs.oracle.com/javase/6/docs/api/java/awt/Rectangle.html

Rectangleクラスを使用します。

ここで、いくつかのコード

http://pastebin.com/raw.php?i=TzkST3Hm

于 2012-11-05T13:42:44.093 に答える
1

長方形の衝突を行う最善の方法は、Rectangleクラスを使用して メソッドを使用して衝突を検出し、と.intersects(Rectangle)という新しい変数を計算することです。displacementXdisplacementY

displacementX = Math.abs(entitiy1.getX() - entity2.getX());

displacementY = Math.abs(entitiy1.getY() - entity2.getY());

したがって、現在私たちが持っているのは、entity1侵入しているピクセルの量ですentity2(または絶対値のためにその逆)。次に、いくつかの比較を実行し、 lesser の値だけ移動entity1(または) します。これにより、完全に見える衝突が得られるはずです。entity2displacement

これは少なくとも私がそれを行う方法です。長方形衝突の正しい方法は次のとおりです。

1) 衝突するかどうかを判断する

2) 修正する

3) レンダリング

衝突を検出した後に単に動きを止めるだけでは、見た目が悪くなります (特にフレーム レートが低い場合)。

私が助けてくれることを願っています!

〜イズマン

于 2012-11-05T16:01:02.503 に答える