2015-06-02 2 views
0

здесь код, где я получаю эту проблему:Когда я прохожу Texture2D в качестве параметра в классе, эта текстура пустой

namespace Menu_test 
{ 
    /// <summary> 
    /// The main menu screen is the first thing displayed when the game starts up. 
    /// </summary> 
    class MainMenuScreen : MenuScreen 
    { 
     #region Initialization 
     ContentManager content; 
     Texture2D playgame; 
     Texture2D exit; 

     /// <summary> 
     /// Constructor fills in the menu contents. 
     /// </summary> 
     public MainMenuScreen() 
      : base() 
     { 
      // Create our menu entries. 
      MenuEntry playGameMenuEntry = new MenuEntry(playgame); 
      MenuEntry exitMenuEntry = new MenuEntry(exit); 

      // Hook up menu event handlers. 
      playGameMenuEntry.Selected += PlayGameMenuEntrySelected; 
      exitMenuEntry.Selected += OnCancel; 

      // Add entries to the menu. 
      MenuEntries.Add(playGameMenuEntry); 
      MenuEntries.Add(exitMenuEntry); 
     } 

     public override void LoadContent() 
     { 
      if (content == null) 
       content = new ContentManager(ScreenManager.Game.Services, "Content"); 
      Art.Load(content); 

      playgame = Art.PlayGame; 
      exit = Art.Exit; 
      if (playgame==null) 
       throw new ArgumentNullException(); 
     } 


     /// <summary> 
     /// Unloads graphics content for this screen. 
     /// </summary> 
     public override void UnloadContent() 
     { 
      content.Unload(); 
     } 

     #endregion 

     #region Handle Input 


     /// <summary> 
     /// Event handler for when the Play Game menu entry is selected. 
     /// </summary> 
     void PlayGameMenuEntrySelected(object sender, PlayerIndexEventArgs e) 
     { 
      LoadingScreen.Load(ScreenManager, true, e.PlayerIndex, 
           new GameplayScreen()); 
     } 


     /// <summary> 
     /// Event handler for when the Options menu entry is selected. 
     /// </summary> 


     /// <summary> 
     /// When the user cancels the main menu, ask if they want to exit the sample. 
     /// </summary> 
     protected override void OnCancel(PlayerIndex playerIndex) 
     { 
      ScreenManager.Game.Exit(); 
     } 




     #endregion 
    } 
} 

Таким образом, в MainMenuScreen() мой playgame является null, но в LoadContent() не null. В основном, я хочу передать Texture2D в качестве параметра в класс MenuEntry, но текстура равна null даже перед передачей классу. Вы можете загрузить полный проект here, если хотите попробовать его запустить.

Благодарим вас за чтение.

ответ

0

LoadContent вызывается XNA после инициализации вашего MainMenuScreen. Возможно, вам придется отложить использование вашего объекта playGame до момента загрузки текстуры или инициализации вашего MenuEntries в LoadContent.

+0

Ну, я должен поблагодарить вас, потому что я уже три дня был на этой проблеме. Я не знаю, является ли инициализация вашего 'MenuEntries' в' LoadContent' правильным способом сделать это, но это работает хотя бы! Еще раз спасибо! – MoniqueDumont

+0

@MoniqueDumon Это на самом деле проблема с курицей или яйцом. Записи меню требуют содержимого из метода, вызванного после конструктора. Либо вы инициализируете их без текстуры, а затем назначаете им текстуру в LoadContent, мы просто создаем их в LoadContent с текстурой, которую вы только что загрузили. –

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

  • Нет связанных вопросов^_^