我不确定我的按钮类文件是否仅适用于一个GameState

时间:2016-11-03 19:14:22

标签: c# xna

这是我创建按钮的类文件:

class Button
{
    Texture2D buttonTexture;
    Rectangle buttonRectangle;
    Color buttonColour = new Color(255, 255, 255, 255);
    public Vector2 size, buttonPosition;

    public Button(Texture2D newButtonTexture, Vector2 newSize)
    {
        buttonTexture = newButtonTexture;
        size = newSize;
    }

    public void setPosition(Vector2 newButtonPosition)
    {
        buttonPosition = newButtonPosition;
    }

    bool down;
    public bool isClicked;

    public void Update(MouseState mouse)
    {
        buttonRectangle = new Rectangle((int)buttonPosition.X, (int)buttonPosition.Y, (int)size.X, (int)size.Y);

        Rectangle mouseRectangle = new Rectangle(mouse.X, mouse.Y, 1, 1);

        if (mouseRectangle.Intersects(buttonRectangle))
        {
            if (buttonColour.A == 255)
                down = false;
            if (buttonColour.A == 0)
                down = true;
            if (down)
                buttonColour.A += 3;
            else
                buttonColour.A -= 3;
            if (mouse.LeftButton == ButtonState.Pressed)
                isClicked = true;
        }
        else if (buttonColour.A < 255)
        {
            buttonColour.A += 3;
            isClicked = false;
        }
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(buttonTexture, buttonRectangle, buttonColour);
    }
}

下面是我在LoadContent中创建按钮的方法(忽略破旧的参数,就像我现在正在做的那样):

btnResume = new Button(Content.Load<Texture2D>("Buttons/button_Resume"), new Vector2(GraphicsDevice.Viewport.Width / 1.875f, GraphicsDevice.Viewport.Height / 4));
btnResume.setPosition(new Vector2(GraphicsDevice.Viewport.Width / 2 - (0.5f*btnResume.size.X), GraphicsDevice.Viewport.Height / 3));
btnQuit = new Button(Content.Load<Texture2D>("Buttons/button_Exit"), new Vector2(GraphicsDevice.Viewport.Width / 1.875f, GraphicsDevice.Viewport.Height / 4));
btnQuit.setPosition(new Vector2(GraphicsDevice.Viewport.Width / 2 - (0.5f*btnQuit.size.X), GraphicsDevice.Viewport.Height - (GraphicsDevice.Viewport.Height / 3)));

这就是我在Game1.cs的绘图功能中绘制两个按钮的方法:

case GameState.Menu:
    btnResume.Draw(spriteBatch);
    btnQuit.Draw(spriteBatch);
    break;

一切正常。然而,出于某种原因,当为“Play”按钮执行相同的操作以进入称为“MainMenu”的新游戏状态时,该按钮不会显示(我已经测试过将按钮代码置于游戏状态“菜单”中)并且按钮确实出现,在“菜单”以外的任何其他游戏状态下它都不会显示。

有人知道它为什么不起作用吗?我记得创建按钮,设置位置,然后在Game1.cs中绘制函数的“case GameState.MainMenu”部分中绘制它,所以老实说我不知道​​为什么它不起作用。作为旁注,我已经尝试为另一个名为“CharacterSelection”的游戏状态绘制按钮,这也不起作用,但是如果我使用spriteBatch.Draw它会起作用(所以我很确定它是按钮的问题类'绘制函数。

我可以提供代码或游戏内元素的截图,如果代码很乱,我很抱歉,我倾向于这么做。这是我的第一个XNA游戏,过去我没有用c#编码,所以这对我来说很新。

编辑:
以下是我的所有游戏状态:

enum GameState 
{ 
    Opening, 
    MainMenu, 
    CharacterSelection, 
    Countdown, 
    Playing, 
    Menu, 
    Options,
} 
GameState CurrentGameState = GameState.Opening;

打开 - 打开电影主菜单 - 标题屏幕基本上是字符选择 - 选择要播放的字符。倒计时 - 比赛开始前3,2,1 GO。正在播放 - 游戏处于活动状态,玩家正在播放e.t.c菜单 - 暂停菜单(按下esc时打开)选项 - 在暂停或主菜单中按下“选项”时(尚未设置)。

1 个答案:

答案 0 :(得分:0)

感谢您的帮助,但我已经解决了。我傻了!忘了“btnPlay.Update(mouse);”在我的更新功能! -__-