だから私はそうしようとしました。敵の左側の位置がプラットフォームの右側よりも大きい場合、敵は反対方向に向きを変え、その逆も同様です。今の問題は、ゲームが突然それを認識できなくなることです。この敵は同時に空中にジャンプするので、X値のみをチェックするようにしました。(長方形の右側と左側)
コードは次のとおりです。
これらは、プラットフォームの内側にあるかどうかを確認します...
static class RectangleHelper
{
public static bool isInsideOf(this Rectangle r1, Rectangle r2)
{
return (r1.Right >= r2.Left &&
r1.Left <= r2.Right);
}
}
if (!chompBall.rectangle.isInsideOf(platform.rectangle))
{
if (chompBall.movingRight == true && chompBall.canChangeDirection == true)
chompBall.movingRight = false;
else if (chompBall.movingRight == false && chompBall.canChangeDirection == true)
chompBall.movingRight = true;
chompBall.canChangeDirection = false;
}
私は多くのことを変更しようとしましたが、! それが機能するかどうかを確認しますが、いいえ。何も思いつきません!面白いことに、常に地面 (他の敵) に触れている場合は機能しますが、X 座標のみが重要なため、機能しません。
助けてください!
-編集:
ロジックを分割しますか? それはこれを行うことを意味しますか?:
if (!chompBall.rectangle.isInsideOf(platform.rectangle) && chompBall.movingRight == true)
chompBall.movingRight = false;
else if (!chompBall.rectangle.isInsideOf(platform.rectangle) && chompBall.movingRight == false)
chompBall.movingRight = true;
-編集 2: ああ、私はあなたが何を意味するか知っていると思います。右にあるかどうかをチェックする RectangleHelper を作成し、その逆も行います。それでも機能しません。結果は同じです。
if (chompBall.rectangle.isRightOf(platform.rectangle) && chompBall.movingRight == true)
chompBall.movingRight = false;
else if (chompBall.rectangle.isLeftOf(platform.rectangle) && chompBall.movingRight == false)
chompBall.movingRight = true;
編集 3、敵の動き。ご覧のとおり、ここでは "canChangeDirection bool" が使用されています。これは、敵がプラットフォームの端に到達すると向きを変え、100ms まで再び向きを変えることができないようにするためのものです。コーナー:
if (movingRight == true)
{
position.X += 2;
rotation += 0.05f;
}
else if (movingRight == false)
{
position.X -= 2;
rotation -= 0.05f;
}
if (canChangeDirection == false)
{
timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
if (timer >= 100)
{
canChangeDirection = true;
timer = 0;
}
}