2016-12-05 11 views
0

2つの四角形の間にintersects()を使用して最終的に衝突検出を行っていますが、動作しているようです。しかし、プレイヤーはちょうど長方形にくっついて動くことができません。だから私は現在、プレーヤーが動く前に衝突をチェックしようとしています。移動前のJavaの衝突検出

if(up == true){ 
     Rectangle futurerect = new Rectangle(px,py-=5,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      py-=5; 
      repaint(); 
     } 
    } 
    if(down == true){ 
     Rectangle futurerect = new Rectangle(px,py+=5,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      py+=5; 
      repaint(); 
     } 
    } 
    if(left == true){ 
     Rectangle futurerect = new Rectangle(px-=5,py,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      px-=5; 
      repaint(); 
     } 
    } 
    if(right == true){ 
     Rectangle futurerect = new Rectangle(px+=5,py,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      px+=5; 
      repaint(); 
     } 
    } 

を私はちょうど新しい矩形を作成しますが、それはプレイヤーが移動した場合も、それが衝突するかどうかを確認する場所で:ここで

は、私がしようとしているものです。もしそうなら、動かさないでください。

問題は、プレイヤーが四角形の中に移動すると、遅くなることです。それはまだ壁を通って動きますが、何らかの理由でより遅いペースで動きます。

この問題の原因は何ですか?

答えて

1

新しいRectangleをインスタンス化すると、pyまたはpxが増減してその値がRectangleのコンストラクタに代入されるため、正しい領域をチェックしていないようです。

デカルトで0,0のプレイヤーがいて、上に移動したかどうかを知りたい場合は、壁に当ります。

if (up == true) { 

    Rectangle futurerect = new Rectangle(px,py-=5,81,150); 

    if(!futurerect.intersects(wallexample)){ 
     py-=5; 
     repaint(); 
    } 
} 

一度Rectangleをインスタンス化すると、pyが-5に設定されるようになりました。

Rectangle futurerect = new Rectangle(px,py-=5,81,150); 

第2パラメータではpy- = 5であるためです。

交差検査を実行すると、0、-5が見えます。一度「はい、ここの壁はありません」と言うと、あなたは別の壁を減らします。5.今度は、プレーヤーのcoord px、0のピー、-10があり、その場所の壁をチェックしませんでした。 、

Rectangle futureRect = new Rectangle(px, py - 5, 81, 150); 
+0

ああ、私は今、私のミスを参照してください、ありがとう:

は、PX/PYに新しい値を代入しませんので、ここでの論理を固定してください。 – joey942