C# 如何更改另一个类中主类的枚举值
我试图为我的游戏创建一个开始菜单,我的代码使用Enum来监控屏幕状态 现在我想更改在我的后台类的主类中声明的screenstateC# 如何更改另一个类中主类的枚举值,c#,enums,xna,C#,Enums,Xna,我试图为我的游戏创建一个开始菜单,我的代码使用Enum来监控屏幕状态 现在我想更改在我的后台类的主类中声明的screenstate Screen screen = new Screen(); 在Game1类中声明 Background(ref screen); 这在后台类的更新方法中 KeyboardState keystate = Keyboard.GetState(); switch (screen) { case Screen.Start: if (isPres
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;
}
}
出于某种原因,当我播放这个并按下enter按钮时,后台类的屏幕发生了更改,但主类的屏幕没有更改。我如何更改它?可能您在其他地方做错了什么,此代码似乎是正确的 您可以在
后台
类中添加GetState()
方法绕过此问题,并在Game1
更新
方法中调用它,而无需使用ref screen
编辑
如果screen
是enum
我想你不能像传递引用一样传递它,因为
枚举是引用类型,但任何特定的枚举类型都是值
类型
我喜欢这个方法,但是没有办法解决吗?你是说你的解决方案?我不明白什么是
screen
,你调用一个构造函数,然后你像enum
一样分配它。真的。。。我怎么没看到,哈哈,我是个新手,我只是习惯了初始化类型。如果它是一个值类型,那么解决方法是什么?我如何引用它?如果它是一个值,你肯定不能使用它作为引用,所以我认为你必须使用类似于我的解决方案的东西。它看起来像public Screen GetScreen(){return Screen}