XNA 游戏冻结

XNA game frozen

我正在学习创建 2d space 射击游戏的教程。它工作正常,直到我添加代码来生成敌人的暴徒,现在它运行但它被冻结了。我不明白为什么它不起作用。没有任何地方或类似的错误。

谢谢。

您的更新方法中的括号有一个小错字。

protected override void Update(GameTime gameTime)
    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
        Exit();
    //updating mobs and checking for collisions
    foreach (Mobs M in mobsList)
    {
        // Updating the mobs, collision checking, etc here
        ...

        ...
        Player.update(gameTime);
        bG.update(gameTime);
        loadAsteroids();
        loadMobs();

        foreach (Roids R in asteroidList)
        {
            // Updating the asteroids, collision checking, etc
            ...

            ...
            M.update(gameTime);
            R.update(gameTime);
        }

        base.Update(gameTime);
    }
}

这里主要有两点错误。首先,这段代码:

Player.update(gameTime);
bG.update(gameTime);
loadAsteroids();
loadMobs();

foreach (Roids R in asteroidList)
{
    // Updating the asteroids, collision checking, etc
    ...
    M.update(gameTime);
    R.update(gameTime);
}
base.Update(gameTime);

将在第一个 foreach 循环中 运行。每次调用更新时,您都会为每个生物更新一次播放器、背景、每颗小行星和 window。这只意味着每次更新发生一次,而不是每个正在更新的生物一次。 这就是您的游戏滞后或卡顿的原因。这只是 mob 的 foreach 循环中括号的错位 - 将所有这些东西移到 foreach 循环之外。

另一个错误是这部分:

foreach (Roids R in asteroidList)
{
    // Updating the asteroids, collision checking, etc
    ...
    M.update(gameTime); /* THIS LINE HERE */
    R.update(gameTime);
}

在这里,您要为每个小行星更新每个 Mob 成员一次。如果屏幕上有 15 颗小行星,则每个生物成员将更新 15 次。将该行移动到第一个 foreach 循环中。