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 语句没有将两个值视为相等,即使它们看起来是相等的。

4

3 回答 3

3

我相信这是因为 Color.red 是一个对象,而不是一个值。尝试使用

collisionMap.getColor(textX, testY).equals(Color.red)
于 2012-05-11T21:12:27.330 回答
1

代码可能通过 == 比较对象引用。也许将比较替换为:

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

此外,请确保您正确实施了 equals()。

于 2012-05-11T21:13:21.647 回答
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!
于 2012-05-11T21:19:55.617 回答