0

スローされた例外でいくつかの問題が発生しています。以下は、XNAループからの描画メソッドです。

protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.White);

        checkInitialization();  // Makes sure that the graphics loader has been initialized
        spriteBatch.Begin();
        GameRunner.CurrentGame.GraphicsSystem.Draw(this.spriteBatch);
        spriteBatch.End();  // Exception is thrown here

        base.Draw(gameTime);
    }

そして、これがグラフィックシステムからの描画方法です。

public void Draw(SpriteBatch spriteBatch)
    {
        foreach (GraphicsComponent component in this.components)
        {
            component.Draw(spriteBatch, this.texture);
        }
    }

グラフィックコンポーネントは、graphicsSystemのList<>に保存されます。問題の一部は、私がプロジェクト間で作業していることかもしれないと思っています。上記のトップループはXNAプロジェクトにあります。2番目の描画方法は、私が作成したゲームライブラリにあります。そして最後に、component.draw()メソッドの実際の実装は、私が取り組んでいる現在のゲームに固有の3番目のプロジェクトにあります。グラフィックシステムのテクスチャフィールドは、グラフィックシステムの構築時にContent.Load関数から初期化されます。

私はいくつかの異なることを試みました。spritebatch.beginとspritebatch.endをグラフィックシステムに移動しましたが、それでも例外が発生しました。グラフィックシステムのコンポーネントリストが空の場合、例外は表示されません。

スコープがあるプロジェクトから別のプロジェクトに移動するときに、ロードされたテクスチャがスコープから外れるかどうかはわかりませんが、そうではないと思います。単一のプロジェクトでも同じ種類のセットアップが機能しましたが、他の場所でコードの一部を使用するために複数にリファクタリングしていました。消えていくテクスチャのどこにもdisposeとは呼んでいないので、狩りを始めるかどうかさえ本当にわかりません。

これが明確でない場合は、私に知らせてください。詳しく説明します。

4

1 に答える 1

0

コンテンツをどのように管理するかを知る必要があります...

テクスチャを手動で破棄しない場合は、コンテンツマネージャをどこかに破棄していると思います。

game.Content.Load(asset)を使用してアセットをロードすると、コンテンツマネージャーはロードされたリソースのリストを保持し、game.Cntent.Dispose()が呼び出されたときにコンテンツマネージャーがそれらを解放する責任があります。

于 2011-08-29T23:15:39.060 に答える