здесь код, где я получаю эту проблему:Когда я прохожу 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, если хотите попробовать его запустить.
Благодарим вас за чтение.
Ну, я должен поблагодарить вас, потому что я уже три дня был на этой проблеме. Я не знаю, является ли инициализация вашего 'MenuEntries' в' LoadContent' правильным способом сделать это, но это работает хотя бы! Еще раз спасибо! – MoniqueDumont
@MoniqueDumon Это на самом деле проблема с курицей или яйцом. Записи меню требуют содержимого из метода, вызванного после конструктора. Либо вы инициализируете их без текстуры, а затем назначаете им текстуру в LoadContent, мы просто создаем их в LoadContent с текстурой, которую вы только что загрузили. –