0

プレイヤースプライトとスパイクスプライトがあります。スパイクは下向きで、プレーヤーの頭の高さくらいです。選手の長方形の右側がスパイクの長方形に入ると動かなくなるように設定しました。しかし、私はそれをこのように設定したい-

if (playerRect.Right == spikesRect.Left - 1)
{
    speedRight = 0;
}

ただし、これは機能しません。プレイヤーはそれを通り過ぎることができます。私がそれを機能させる唯一の方法は、私がこれを行う場合です-

if (playerRect.Right > spikesRect.Left)
{
    speedRight = 0;
}

明確にするために、spikesRect.Left の値は 350 です。playerRect.Right が 349 に等しい場合、右への移動を停止するようにします。ご協力ありがとうございます。

4

3 に答える 3

0

主な問題は、プレーヤーが移動しているときに常にスポット 349 に着陸するとは限らないことです。移動すると 348 から 350 に移動する可能性があるため、349 のときにトリガーされることはありません。ただし、できることは次のとおりです。

int i = spikesRect.Left - playerRect.Right;
if ( i < 0 )
    playerRect.X += i; //playerRect.X can be replaced by a position variable

スポット 351 に到達すると、350 - 351 = -1 となり、0 未満であるため、playerRect.X に追加され、playerRect.X が playerRect.Right が 350 の場所に戻されます。そうすれば、まるで見えません。あなたのプレーヤーはスパイクを貫通しています。

于 2013-07-09T17:50:41.683 に答える
0

基本的な衝突だけが必要な場合は、次を使用します。

if(playerRect.Intersects(spikesRect))
{
//handle collision
}

異なる方向の速度に対して異なる変数を使用するのではなく、速度と方向の変数を使用することをお勧めします。これは、キャラクターの速度または方向を変更したい場合に、変数を 1 つだけ変更する必要があることを意味します。

于 2013-07-08T17:41:36.653 に答える