我可以在改变状态之前清除前一个屏幕上的按钮吗?

本文关键字:一个 屏幕 按钮 状态 改变 清除 我可以 | 更新日期: 2023-09-27 18:05:37

我正在用Xna构建一个c#游戏。当我在菜单和播放屏幕之间改变游戏状态时,就好像新屏幕被绘制在新屏幕上一样。当我点击前一屏幕上按钮所在的屏幕部分时,它就会改变状态,如果我在第一关时点击前一屏幕上第2关按钮所在的屏幕部分,它就会直接跳到第2关。

这是我的代码从第一个菜单按钮类:
 class menubutton1
{
    public bool selected = false;
    public string text = "menuButton";
    public Rectangle area;
    public menubutton1(Rectangle Area, string Text, int i) 
    { 
        area = Area; 
        text = Text;
        i = 4;
    }
    public void mouseOver(MouseState mbd)
    {
        //CHECK IF MOUSE IS OVER BUTTON
        if (mbd.X > area.X && mbd.X < area.X + area.Width && mbd.Y > area.Y && mbd.Y > area.Y + area.Height)
        {
            selected = true;
        }
        else { selected = false; }
    }

    public void Draw(SpriteBatch spriteBatch, SpriteFont font)
    {
        if (selected == false) 
        {
            spriteBatch.DrawString(font, text, new Vector2(area.X, area.Y), Color.Black);
        }
        if (selected == true) 
        {
            spriteBatch.DrawString(font, text, new Vector2(area.X, area.Y), Color.White);
        }
    }
}
}

,这是来自main的代码:

 List<menubutton1> mbs1 = new List<menubutton1>();

这是来自更新方法:

 foreach (menubutton1 m in mbs1)
        {
            m.mouseOver(mbd);
            //Check if play button has been clicked
                if (m.text == "PLAY GAME 1" && m.selected == true && mbd.LeftButton == ButtonState.Pressed && prevmbd.LeftButton == ButtonState.Released)
                {
                    gamestate = gameState.play1;
                }
                if (m.text == "PLAY GAME 2" && m.selected == true && mbd.LeftButton == ButtonState.Pressed && prevmbd.LeftButton == ButtonState.Released)
                {
                    gamestate = gameState.play2;
                }
                if (m.text == "PLAY GAME 3" && m.selected == true && mbd.LeftButton == ButtonState.Pressed && prevmbd.LeftButton == ButtonState.Released)
                {
                     gamestate = gameState.play3;
                }

        }

有办法阻止这种情况发生吗?在改变状态移动到新屏幕之前,是否有一种方法可以清除前一个屏幕上的按钮?

如果有任何帮助,我将不胜感激

我可以在改变状态之前清除前一个屏幕上的按钮吗?

取决于你想如何设置。一种方法是使用graphicsdevice。clear (Color.Black);这样你就可以在黑屏上画画了。另一种方法是创建多个类,当它改变GameStates时,让它从一个特定的类加载绘制,它只会绘制一个类中的内容。

相关文章: