如何在另一个类中更改主类的枚举值

时间:2013-10-11 07:27:05

标签: c# enums xna

我正在尝试为我的游戏制作一个开始菜单,我的代码使用Enum来监控屏幕状态。

现在我想在我的Background类

中更改在主类中声明的screenstate
Screen screen = new Screen();

在Game1类中声明

Background(ref screen);

这是后台类的更新方法

KeyboardState keystate = Keyboard.GetState();
switch (screen)
{
    case Screen.Start:
        if (isPressed && keystate.IsKeyUp(Keys.Up) && keystate.IsKeyUp(Keys.Down) && keystate.IsKeyUp(Keys.Enter))
        {
            isPressed = false;
        }
        if (keystate.IsKeyDown(Keys.Down) && isPressed != true)
        {
            if (menuState == MenuState.Options)
                menuState = MenuState.Credits;
            if (menuState == MenuState.Play)
                menuState = MenuState.Options;
            isPressed = true;
        }

        if (keystate.IsKeyDown(Keys.Up) && isPressed != true)
        {
            if (menuState == MenuState.Options)
                menuState = MenuState.Play;
            if (menuState == MenuState.Credits)
                menuState = MenuState.Options;
            isPressed = true;
        }

        switch (menuState)
        {
            case MenuState.Play:
                arrowRect.X = 450;
                arrowRect.Y = 220;
            if (keystate.IsKeyDown(Keys.Enter) && isPressed != true)
                screen = Screen.Play;
                break;
            case MenuState.Options:
                arrowRect.X = 419;
                arrowRect.Y = 340;
                if (keystate.IsKeyDown(Keys.Enter) && isPressed != true)
                    screen = Screen.Options;
                    break;
            case MenuState.Credits:
                arrowRect.X = 425;
                arrowRect.Y = 460;
                if (keystate.IsKeyDown(Keys.Enter) && isPressed != true)
                    screen = Screen.Credits;
                break;
            }
            break;
       }
 }

出于某种原因,当我播放这个并点击输入按钮时,后台课程的屏幕被更改但是主课程的屏幕不是我怎么能改变这个?

1 个答案:

答案 0 :(得分:0)

也许你在其他地方做错了,这段代码似乎是正确的。

您可以绕过此问题,在GetState()课程中添加Background方法,并使用Game1 Update方法调用该方法,而不使用ref screen

修改

如果screenenum我认为你不能像参考那样传递它,因为

  

System.Enum是一种引用类型,但任何特定的枚举类型都是一个值   类型。