开发者

XNA 4.0 Graphics Device Error

I know that the way the declaration of the graphics device is suppose to look in the main Game1() constructor is:

 GraphicsDeviceManager graphics;

 graphics = new GraphicsDeviceManager(this);

then you can use stuff like:

 graphics.PreferredBackBufferWidth = 1366;

But if I declare the same inside a separate class, what do I fill in for "this"?

 GraphicsDeviceManager graphics;

 graphics = new GraphicsDeviceManager(?);

EDIT:

After modifying everything as you said, I now get a error that sends me to this line of code:

     /// <summary>
    /// Event handler for when the Play Game menu entry is selected.
    /// </summary>
    void PlayGameMenuEntrySelected(object sender, Pl开发者_StackOverflow中文版ayerIndexEventArgs e, Game game)
    {
        LoadingScreen.Load(ScreenManager, true, e.PlayerIndex,
                           new GameplayScreen(game));
    }

This program is the menu sample you can get from Microsoft, heavily modified of course, this is the code that executes when you hit enter on the main menu screen with "Play Game" highlighted. I guess the problem is passing the variable.

Edit 2:

I fixed the code I think but now it sent me to this line and I don't know how to edit it.

 playGameMenuEntry.Selected += PlayGameMenuEntrySelected;


You need a reference to your Game instance. I'd just pass it to your new class constructor.

For example, if you want to move the GraphicsDeviceManager instance into a separate class, Foo,

/// <summary>
/// This is the main type for your game
/// </summary>
public class Game1 : Microsoft.Xna.Framework.Game
{
    private Foo _foo;

    public Game1()
    {
        _foo = new Foo(this);
    }

    protected override void Dispose(bool disposing)
    {
        if (_foo != null)
        {
            _foo.Dispose();
            _foo = null;
        }
        base.Dispose(disposing);
    }

}

public class Foo : IDisposable
{
    private Game _game;
    private GraphicsDeviceManager _graphics;
    private SpriteBatch _spriteBatch;

    public Foo(Game game)
    {
        _game = game;
        _game.Content.RootDirectory = "Content";

        _graphics = new GraphicsDeviceManager(_game);
        _spriteBatch = new SpriteBatch(_game.GraphicsDevice);
    }


    public void Dispose()
    {
        if (!_spriteBatch.IsDisposed)
        {
            _spriteBatch.Dispose();
            _spriteBatch = null;
        }
    }
}

Update

It's important to properly dispose of a lot of XNA objects (otherwise, you get memory leaks). See Foo.Dispose() and the Game1.Dispose() override above.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜