2013-10-11 2 views
0

Я пытаюсь создать начальное меню для своей игры, и мой код использует Enum для мониторинга состояния экрана.Как изменить значение enum из основного класса в другом классе

Теперь я хочу, чтобы изменить 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; 
     } 
} 

По какой-то причине, когда я играю в это, и я нажимаю кнопку ввода экран «Фоновый класс» изменен, но экран основного класса не так, как я могу это изменить?

ответ

0

Возможно, вы делаете что-то неправильно в другом месте, этот код кажется правильным.

Вы можете обойти эту проблему, добавив метод GetState() в вашем Background классе, и назвать его в Game1Update методом, без использования ref screen.

EDIT

Если screen является enum я думаю, что вы не можете передать его как ссылку, потому

System.Enum является ссылочным типом, но любой конкретный тип перечисления является стоимость type.

+0

Мне нравится этот метод, но разве вокруг него нет возможности? – MikaAK

+0

Вы имеете в виду решение? Я не могу понять, что такое 'screen', вы вызываете конструктор, но затем вы назначаете его как' enum'. – pinckerman

+0

действительно ... как я не видел, что ха-ха, я новичок, я просто привык к инициализации типов. Каково это, если это тип значения, как я могу его отменить? – MikaAK

Смежные вопросы