我正在尝试为旧学校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 :(得分:3)
我相信这是因为Color.red是一个对象,而不是一个值。尝试使用
collisionMap.getColor(textX, testY).equals(Color.red)
答案 1 :(得分:1)
代码可能是通过==比较对象引用。也许用以下内容代替比较:
if ((collisionMap.getColor(testX, testY)).equals(Color.red))
另外,请确保正确实施了equals()。
答案 2 :(得分: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!