Gamestate运行不正常

时间:2012-04-19 15:24:54

标签: c# xna

我的所有三个屏幕/状态都运行良好,但是,我实现了第四个作为信息屏幕。到目前为止很好,但是当我运行游戏时,按下'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'? 谢谢。

1 个答案:

答案 0 :(得分:1)

H密钥不起作用,因为H密钥的更新代码位于UpdateInformation ...

它实际上做的是:如果您在信息屏幕中,按H转到信息屏幕(这没有意义)

您应该将H检测代码移到更合适的位置。您的S检测代码在哪里?

此外,我建议您使用枚举而不是数字作为游戏状态。

enum gameStates
{
    Started,
    Playing,
    Ended,
    Information,
}

这样,维护和理解就容易得多。 (见下面的例子)

switch(GameState)
{
    case gameStates.Started:
         //Do something
         break;
}