2012-03-19 8 views
-2

基本的には、別のプログラムの非常に単純な衝突テストを試していますが、私は作業していますが、それはとてもシンプルなようです(とにかく、ちょっとばかげたばか!)とにかく、 :Collision ifステートメントが動作しないようです

public void run() { 
    while(true){ 

     try { 
      if(rect.rect.intersects(rect1.rect)){ 
       System.out.println("Test1"); 
       if(rect1.x == ((rect.x + rect.width)-1)){ 
        System.out.println("Test2"); 
       rect1.x = rect.x + rect.width; 
       rect1.dx = 0; 

       } 
      } 

      rect.update(); 
      rect1.update(); 

      Thread.sleep(50); 

プログラムはtest2になりません!

この問題を解決する助けがあれば幸いです!前もって感謝します!

ペイント構成部品:

public void paintComponent(Graphics g){ 
    rect1.paint(g); 
    rect2.paint(g); 
    g.drawString(String.valueOf(rect1.x), 100, 100); 
    g.drawString(String.valueOf(rect2.x+rect2.width), 100, 150); 
    repaint(); 
} 

画像:

test

+4

おそらく 'rect.rect'は' rect1.rect'と交差しません...これを短く、問題を示す*完全なプログラムに編集してください... –

+1

あなたはそれを仮定する特別な理由はありますか? 2番目のifの式は真ですか? – VeeArr

+2

このテストの目的が何であるかを説明すると役に立ちます。 – Robinson

答えて

1

のEclipse(またはお好みのIDE)でプログラムを実行して、最初にブレークポイントを設定するには、実行時のデバッグ機能を使用しますifステートメント。次に、ステップスルーして変数の値を調べます。うまくいけば、あなたのコードがあなたが期待していることをやり遂げるのに失敗した理由がこれで分かります。

+0

これは多くの助けになりました。以前はブレークポイントを実際に使用していませんでしたが、今は自分のために何かを知っています。 – hazard1994

+0

問題ありません。 printlnによるデバッグは苦痛です。ブレークポイントの条件を設定することもできます。彼らは非常に強力です。楽しむ! –

0

どのように(デバッガを持っていない限り)単に利便性をデバッグするために、この方法の構築について:

public static printRectProperties(Rectangle rect, String rectangleName){ 
    System.out.println(rectangleName + ": x = " + rect.x + ", y = " 
     + rect.y + ", width = " rect.width + ", height = " + rect.height; 
} 

が次にあなたは、単にif文の実行前に長方形に関する統計情報を記録するために、このメソッドを呼び出すことができます。

  if(rect.rect.intersects(rect1.rect)){ 
       System.out.println("Test1"); 
        printRectProperties(rect, "rect"); 
        printRectProperties(rect1, "rect1"); 
       if(rect1.x == ((rect.x + rect.width)-1)){ 
        System.out.println("Test2"); 

"Test2"が決して印刷されない理由を簡単に理解できるはずです。

関連する問題