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つの値が等しいように見えても、等しいと見なしていません。

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 に答える