0

XNAゲームスタジオの2Dゲームで作成した船にランドが衝突したときのスコアを扱いたいだけです.Life(Score)はGameLifeクラスのLifeという100変数に収まります...

2つの物体が衝突したときにライフを2ポイント減らしたい...

しかし問題は、船が陸地に衝突したとき、船のオブジェクトが陸地のオブジェクトから遠ざかるまで、人生が即座にマイ​​ナスの値になることです...助けてください...

コードはここに提供されています

`private void HandleLandCollition(List<LandTile> landtiles)
{
    foreach (LandTile landtile in landtiles)
    {
        rectangle1 = new Rectangle((int)landtile.position.X - landtile.texture.Width / 2,
                    (int)landtile.position.Y - landtile.texture.Height / 2,
                    landtile.texture.Width, landtile.texture.Height);//land object

        rectangle2 = new Rectangle((int)position.X - texture.Width / 2,
                    (int)position.Y - texture.Height / 2,
                    texture.Width, texture.Height);//rectangle2 is defined to ship object
        if (rectangle1.Intersects(rectangle2))
        {
            shiplife.Life = shiplife.Life - 2;
        }
    }
}
4

1 に答える 1

1

あなたの問題は、おそらくこのメソッドをフレームごとに呼び出すことです。通常、XNA は Update() を 1 秒あたり 60 回呼び出すため、船が 1 秒間陸地に触れると、2*60 = 120 ヘルスポイントが失われ、マイナス値が表示されます。

私の解決策は次のとおりです。

protected override void Update(GameTime gameTime)
{
    float elapsedTime = (float) gameTime.ElapsedTime.TotalSeconds;
    HandleCollision(landtiles, elapsedTime);
}
float landDamagePerSecond = 2;
private void HandleLandCollision(List<LandTile> landtiles, float elapsedTime)
{
    shipRectangle= new Rectangle((int)position.X - texture.Width / 2,
                (int)position.Y - texture.Height / 2,
                texture.Width, texture.Height);//rectangle2 is defined to ship object

    foreach (LandTile landtile in landtiles)
    {
                landRectangle= new Rectangle(
                (int)landtile.position.X - landtile.texture.Width / 2,
                (int)landtile.position.Y - landtile.texture.Height / 2,
                landtile.texture.Width, landtile.texture.Height);//land object

        if (landRectangle.Intersects(shipRectangle))
        {
            shiplife.Life -= landDamagePerSecond * elapsedTime;
        }
    }
}

経過時間は、最後のフレームが呼び出されてからの時間です。これに、1 秒あたりにランドタイルが船に与えるダメージを掛けると、船がランドタイルに触れると、1 秒あたり 2 ヘルスポイントを失うことになります ;)

于 2012-10-27T20:07:59.913 に答える