0

画面上を移動する 2 つの正方形があります。両方の正方形は同じクラスのものです (2 回描画された同じ正方形です)。それらの間の衝突検出を行う方法はすでにわかっているので、問題はありません。問題は、正方形が互いに通り抜けることができることです。正方形が互いに衝突すると、衝突する前にあった最新の x と y の位置にテレポートするようにできると考えていました。いくつか試してみましたが、どれも機能しません。私のスレッドには、今のところこのコードがあります。

for(int i = 0; i < rectangles.size(); i++){
    Rectangle rect = (Rectangle) rectangles.get(i);
    x = rect.getXPos();
    y = rect.getYPos();
    checkRectCollisionAndMovement();
    for(int j = i + 1; j < rectangles.size(); j++){
        Rectangle rect2 = (Rectangle) rectangles.get(j);
        Rectangle r1 = rect.getBounds();
        Rectangle r2 = rect2.getBounds();
        if(r1.intersects(r2)){
            rect.setXPos(x);
            rect.setYPos(y);
        }
    }
}

衝突したときの位置ではなく、衝突する前の x と y の位置を取得するにはどうすればよいでしょうか?

これは checkCollisionAndMovement メソッドです

public void checkRectCollisionAndMovement(){
    for(int i = 0; i < rectangles.size(); i++){ 
        Rectangle rect = (Rectangle) rectangles.get(i);
        if(rect.getYPos() > 500){
            rect.setYPos(rect.getYPos() - .1);
        }
        if(rect.getYPos() < 500){
            rect.setYPos(rect.getYPos() + .1);
        }
        if(rect.getXPos() > 500){
            rect.setXPos(rect.getXPos() - .1);
        }
        if(rect.getXPos() < 500){
            rect.setXPos(rect.getXPos() + .1);
        }                   
        if(rect.isVisibe()){
            rect.move();
        }else{ 
            rect.remove(i);
        } 
    }   
}
4

1 に答える 1

0

以前のすべての x、y 位置をリストに保存し、衝突が発生したときに 1 ステップバックするか、一時変数に最後の座標のみを保存することができます。しかし、ダンカンが言ったように、あなたの新しい道は影響に直交する軸に沿って反映されるべきだと思います

于 2013-04-26T11:35:24.980 に答える