GraphicsDeviceManager

时间:2012-04-18 13:11:14

标签: c# graphics xna refactoring

任何人都可以帮忙。我正在按照MSDN中的原始图形教程找到here

我试图将代码重新分解一小部分,为此我创建了一个名为MyPrimitives的类,其中我已经放置了教程中的所有代码。然后从例如Game11 Initialize()我可以调用myPrimitive.Initialize()等。

但是我在MyPrimitives CreateVertexBuffer()方法的这行代码中得到一个NullReferenceException:

vertexBuffer = new VertexBuffer(
            graphics.GraphicsDevice,
            vertexDeclaration,
            number_of_vertices,
            BufferUsage.None
            );

从MyPrimitives Initialize()方法调用CreateVertexBuffer(),如下所示:

public void Initialize()
    {
        CreateVertexBuffer();
    }

从Game1 Initialize()调用这个Initialize(),如下所示:

protected override void Initialize()
    {
        myPrimitiveDrawer = new MyPrimitiveDrawer();

        myPrimitiveDrawer.Initialize();

        base.Initialize();
    }

我知道问题是因为我没有将我的graphis [GraphicsDeviceManager图形]设置为对象的实例,但我该如何实际执行此操作? 我试过了:

public void Initialize()
    {
        graphics = new GraphicsDeviceManager(this);  // Tried this
        CreateVertexBuffer();
    }

但是这只会给出无效参数的错误。

有人有任何建议吗?

1 个答案:

答案 0 :(得分:2)

从您的主游戏类开始,并使其扩展Microsoft.Xna.Framework.Game

public class Game : Microsoft.Xna.Framework.Game
{
    GraphicsDeviceManager graphics;

    protected override void Initialize()
    {
            graphics = new GraphicsDeviceManager(this);  
            base.Initialize();
    }
}

然后,您只需要确保在项目扩展时所有类都使用相同的GraphicsDeviceManager。