我的所有三个屏幕/状态都运行良好,但是,我实现了第四个作为信息屏幕。到目前为止很好,但是当我运行游戏时,按下'H'键,它不会将屏幕更改为另一个背景(到目前为止我做了什么)。以下是代码:
public void UpdateInformation(GameTime currentTime)
{
if (Keyboard.GetState().IsKeyDown(Keys.H))
{
GameState = 4;
} // GAMESTATE 4 which is the instruction/Information screen.
}
这是更新方法中游戏状态的代码:
protected override void Update(GameTime gameTime)
{
switch (GameState)
{
case 1: UpdateStarted(gameTime);
break;
case 2: UpdatePlaying(gameTime);
break;
case 3: UpdateEnded(gameTime);
break;
case 4: UpdateInformation(gameTime);
break;
}
base.Update(gameTime);
}
我在这里画画。
public void DrawInformation(GameTime currentTime)
{
spriteBatch.Begin();
spriteBatch.Draw(InfoBackground, Vector2.Zero, Color.White);
spriteBatch.End();
}
以下是状态的绘制信息代码:
protected override void Draw(GameTime gameTime)
{
switch (GameState)
{
case 1: DrawStarted(gameTime);
break;
case 2: DrawPlaying(gameTime);
break;
case 3: DrawEnded(gameTime);
break;
case 4: DrawInformation(gameTime);
break;
}
}
我希望这会有所帮助,只是我的H键没有响应,但我的S键响应良好并开始游戏。四个状态/屏幕是否兼容'Gamestate'? 谢谢。
答案 0 :(得分:1)
H
密钥不起作用,因为H
密钥的更新代码位于UpdateInformation ...
它实际上做的是:如果您在信息屏幕中,按H转到信息屏幕(这没有意义)
您应该将H
检测代码移到更合适的位置。您的S
检测代码在哪里?
此外,我建议您使用枚举而不是数字作为游戏状态。
enum gameStates
{
Started,
Playing,
Ended,
Information,
}
这样,维护和理解就容易得多。 (见下面的例子)
switch(GameState)
{
case gameStates.Started:
//Do something
break;
}