0

私は次の関数を持っています。これは、2 つのスプライトが x 軸上で重なったときに教えてくれます。

public int getSecondObjectX(int secObjWidth)
    {
        int rndX = random.nextInt(AndroidApplication.getInstance().device_width - secObjWidth);

        Rect sObj = new Rect(rndX, 20, rndX + secObjWidth, 10);
        Rect droid = new Rect(myAnimation.getXcord(), 20, myAnimation.getXcord() + myAnimation.getCurrentImage().getWidth(), 10);

        Log.d("Compare Rect", "["+sObj.left+", "+sObj.right+"] ["+droid.left+", "+droid.right+"]");

        if(Rect.intersects(sObj, droid))
        {
            Log.d("INTERSECT", "INTERSECT");

            return getSecondObjectX(secObjWidth);
        }
        else
            return rndX;
    }

しかし、交差することはありません。ここに Logcat があります。

03-19 15:08:12.617: D/Compare Rect(631): [183, 231] [141, 189] <-- should be true
03-19 15:08:22.186: D/Compare Rect(631): [158, 206] [172, 220] <-- should be true
03-19 15:08:26.346: D/Compare Rect(631): [123, 171] [178, 226]
03-19 15:08:30.146: D/Compare Rect(631): [156, 204] [155, 203] <-- should be supertrue
03-19 15:08:32.617: D/Compare Rect(631): [84, 132] [172, 220]

どうしたの?

4

1 に答える 1

3

s の作成方法Rectが間違っています。コンストラクターはpublic Rect (int left, int top, int right, int bottom)範囲チェックを実行しません。ドキュメントには次の情報が記載されています。

注: 範囲チェックは実行されないため、呼び出し元は、左 <= 右および上 <= 下であることを確認する必要があります。

あなたの場合、上>下。

于 2013-03-19T14:24:16.240 に答える