2012-05-11 11 views
1

古い学校のRPG用の衝突マップを作成しようとしています。衝突が発生するはずの赤色(255、0、0)の色を使用してイメージを作成し、スプライトの位置(x、y)が衝突マップ上で赤色になるときにテストしようとしています。ここで動作するようには思えません。私のコードは次のとおりです。赤色のテスト

public boolean isBlocked(int testX, int testY) { 

    System.out.println(collisionMap.getColor(testX, testY)); //debug 
    System.out.println(Color.red); //debug 

    if ((collisionMap.getColor(testX, testY)) == Color.red) { 
      System.out.println("COLLISION OCCURRING!"); //debug 
      return true; 
    } 
    else { 
     System.out.println("NO COLLISION OCCURRING!"); //debug 
     return false; 
    } 
} 

衝突が発生しなければならないとき、私は私のコンソールで次の出力を得る:(1.0,0.0,0.0,1.0)

カラー(1.0,0.0,0.0,1.0)

ノイズが発生しません!

何らかの理由で、Ifステートメントは、2つの値が等しくなるように見えるにもかかわらず、その2つの値をピックアップしません。

+0

を彼らが列挙型ではありません、使用.equals() – esej

答えて

3

これは、Color.redがオブジェクトであり値ではないためです。試してみてください

collisionMap.getColor(textX, testY).equals(Color.red) 
+0

うん、それは問題だった!ありがとうございました! – Rellek

1

このコードでは、オブジェクト参照を==で比較している可能性があります。おそらく比較を次のように置き換えてください:

if ((collisionMap.getColor(testX, testY)).equals(Color.red)) 

また、equals()が正しく実装されていることを確認してください。

0

あなたの色のオブジェクトに対してjava.awt.Color;を使用している場合は、私の最初の質問は..です
I出力彼らは、私はあなたのようなjava.awt.Color[r=255,g=0,b=0]代わりのColor (1.0,0.0,0.0,1.0)を取得します。

このラインを交換してみてください:

if ((collisionMap.getStringColor(0 , 0)).equalsIgnoreCase(Color.red.toString())) 

私はそれが働いていスタンドアロンの作成:

public class Test 
{ 
    public static void main(String args[]) 
    { 
     CollisionMap collisionMap = new CollisionMap(); 

     System.out.println(collisionMap.getStringColor(0 , 0)); 
     System.out.println(collisionMap.getColorColor(0 , 0)); 

     if ((collisionMap.getStringColor(0 , 0)).equalsIgnoreCase(Color.red.toString())) 
     { 
      System.out.println("COLLISION OCCURRING!"); // debug 
     } 
     else 
     { 
      System.out.println("NO COLLISION OCCURRING!"); // debug 
     } 
    } 

    public static class CollisionMap 
    { 
     public Color getColorColor(Integer x , Integer y) 
     { 
      return Color.red; 
     } 

     public String getStringColor(Integer x , Integer y) 
     { 
      return Color.red.toString(); 
     } 
    } 
} 

出力:

java.awt.Color[r=255,g=0,b=0] 
java.awt.Color[r=255,g=0,b=0] 
COLLISION OCCURRING! 
関連する問題