我正在关注创建2D空间射击游戏的教程。它工作正常,直到我添加代码产生敌人的怪物,现在它只是运行但它被冻结。我不明白为什么它不会工作。在任何地方或类似的地方都没有错误。
感谢。
答案 0 :(得分:0)
您的更新方法中包含括号的小错字。
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循环内运行。每次调用更新时,您都会为每个暴徒更新一次播放器,背景,每个小行星和窗口。这仅适用于每次更新一次,而不是每次更新的一次。 这就是为什么你的游戏滞后或冻结。这只是暴徒的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循环。