1

誰でも助けてください。ここにある MSDN からプリミティブを描画するチュートリアルに従っています。

コードを少しリファクタリングしようとしています。そのために、チュートリアルのすべてのコードを配置した MyPrimitives というクラスを作成しました。次に、たとえば Game11 Initialize() から myPrimitive.Initialize() などを呼び出すことができます。

しかし、MyPrimitives の CreateVertexBuffer() メソッドの次のコード行で NullReferenceException が発生します。

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

そして、CreateVertexBuffer() は MyPrimitives Initialize() メソッドから次のように呼び出されます。

public void Initialize()
    {
        CreateVertexBuffer();
    }

そして、この Initialize() は、次のように Game1 Initialize() から呼び出されます。

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

        myPrimitiveDrawer.Initialize();

        base.Initialize();
    }

グラフィック [GraphicsDeviceManager グラフィックス] をオブジェクトのインスタンスに設定していないことが原因であることはわかっていますが、実際にこれを行うにはどうすればよいですか? 私が試してみました:

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 に答える