任何人都可以帮忙。我正在按照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();
}
但是这只会给出无效参数的错误。
有人有任何建议吗?
答案 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。