2012-05-11 45 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語句沒有將兩個值相提並論,即使它們似乎是。

+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;您的彩色物體..
當我輸出他們,我得到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!