处理XNA碰撞时的分数

时间:2012-10-27 10:33:57

标签: c# visual-studio-2010 xna 2d-games

当我在XNA游戏工作室的2D游戏中创建的船上碰撞时,我只想处理得分。生命(得分)在游戏生活类中被定为100变量生命......

当两个物体碰撞时,我想减少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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您的问题可能是您每帧调用此方法。通常XNA每秒调用Update()60次,所以如果你的船只触及陆地上一秒钟,它会失去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;
        }
    }
}

elapsedTime是自最后一帧被调用以来的时间,通过将其与每秒的陆地交易对船舶造成的伤害相乘,将导致船舶在接触到陆地时每秒损失2点生命值;)