1

任何人都可以请帮忙。我正在关注从此处找到的 MSDN 绘制原语的教程。

我正在尝试对代码进行一点重构,为此我创建了一个名为 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();
    }

并且 THIS Initialize() 是从 Game1 Initialize() 调用的,如下所示:

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

        myPrimitiveDrawer.Initialize();

        base.Initialize();
    }

我知道问题是因为我没有将我的 graphis [GraphicsDeviceManager graphics] 设置为一个对象的实例,但我实际上该怎么做呢?我试过了:

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

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

请问有人有什么建议吗?

4

1 回答 1

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。

于 2012-04-18T14:03:40.307 回答