杀死敌人时加入的分数不一致

时间:2017-01-16 10:51:41

标签: c# xna monogame

我正在制作一个小行星驱逐舰游戏,你随着时间的推移得分(游戏变得越来越难),但是当你击中小行星时。我在Game1类中编写了一个方法来计算应该在Update方法结束时添加的分数。

代码如下:

private float CountScore(GameTime gameTime, List<Asteroid> asteroids)
{
    float addScore = 0;
    foreach (Asteroid asteroid in asteroids)
    {
        if (asteroid.Killed)
        {
            addScore += 100;
        }
    }

    if (spaceship1.Alive)
    {
        addScore += 80 * (float)gameTime.ElapsedGameTime.TotalSeconds;
    }

    return addScore;
}

Update方法中调用此方法:

score += CountScore(gameTime, asteroids);

随着时间的推移添加分数的代码部分工作正常。问题在于,当我摧毁一颗小行星时,而不是获得100多个得分,有时我得到200,有时我得到2000,有时我得到5000.我不明白发生了什么,因为只有被小行星杀死的小行星玩家获得属性Killed = true;,所以我并不认为它在屏幕上每个小行星增加100个。

有人知道是什么原因引起的吗?如果需要,我可以发布更多代码,但为了便于阅读,我不想在这里写太多。

编辑: 在添加得分后立即添加asteroid.Killed = false;。但是我仍然不明白这是什么问题,因为看起来它不止一次地绕过同一个小行星。

1 个答案:

答案 0 :(得分:0)

我建议在小行星被杀死时添加到分数的逻辑与杀死小行星的逻辑同时完成。

在处理命中检测时,您可能已经遍历了小行星列表,因此如果逻辑同时完成,它将提高性能,而不是使用另一个foreach循环,如代码中所示

你的addScore + = 80 *(float)gameTime.ElapsedGameTime.TotalSeconds;不可靠,拥有更高FPS的球员将获得不公平的优势。我建议在游戏进程中添加总分时使用deltaTime。