0

したがって、現時点でこれを可能な限り最善の方法でコーディングしていないことは理解しています。これは一種の試運転です。私がやろうとしているのは、長方形と交差プロパティを使用した壁の衝突です (正しい用語を使用していない場合は申し訳ありません)。これまでのところ、画面に2つの長方形があります。1 つはプレイヤーがコントロールし、もう 1 つはプレイが衝突しています。それらが衝突すると、プレイヤーは動きを止めます。問題は、プレーヤーが既に衝突しているときに長方形に移動しようとすると、プレーヤーはその動きに垂直な方向に移動できないことです。つまり、プレーヤーが右矢印キーを押したまま長方形に移動すると、上下に移動できません。ゲームは、x または y 座標が有効でない場合、最後に記録された有効な座標に戻されるという前提で動作しますが、有効な x 座標と y 座標を別々に検出するのに問題があります。コードは次のとおりです。

public void Collision() 
{

    if(x < 0)
        x = 0;

    if(x > 400 - width)
        x = 400 - width;

    if(y < 0)
        y = 0;

    if(y > 300 - height)
        y = 300 - height;


    rect1 = new Rectangle(x, y, 16, 16);
    rect2 = new Rectangle(sx, sy, wid, hei);

    if(!rect1.intersects(rect2))
    {
        validX = true;
        validY = true;
    }
    else
    {
        validX = false;
        validY = false;
    }


    if(validX)
    {
        lastValidX = x;
    }

    if(validY)
    {
        lastValidY = y;
    }

    if(!validX)
    {
        x = lastValidX;
    }

    if(!validY)
    {
        y = lastValidY;
    }

}

Guy クラスの Collision() メソッドは、私が信じている問題を抱えている場所です。はい、私のコードは現在かなり乱雑ですが、これは単なるテストです。

ありがとう、デビッド。

4

1 に答える 1

1

ここで追加のロジックを実行することで、説明していることを実装できます(つまり、一方が false で他方が true の場合を検出します)。

if(!rect1.intersects(rect2))
{
    validX = true;
    validY = true;
}
else
{
    validX = false;
    validY = false;
}

ただし、そもそも長方形が「衝突」状態になることを許可してはいけないようです。たとえば、Moveメソッドを次のように変更できます。

public void Move()
{
    int oldX = x, oldY = y;
    x += dx;
    y += dy;
    if (Collision()) {
        x = oldX;
        y = oldY;
    }
}
于 2013-08-14T12:35:33.357 に答える