2

これは関連している可能性があります。

Update私はメソッドにこのコードを持っています:

    protected override void Update(GameTime gameTime)
    {
        graphics.PreferredBackBufferWidth = 1024;
        graphics.ApplyChanges();

        base.Update(gameTime);
    }

不思議なことに、ApplyChanges行の後で、私のLoadContentメソッドが再度呼び出されます。これは何度も何度も起こります。

なぜこれが起こっているのですか、そしてどうすればそれを防ぐことができますか?

4

2 に答える 2

0

通常、XNA はを呼び出したときにデバイスリセットApplyChangesを実行する必要があります。これにより、DirectX マジックが実行され、すべてのテクスチャなどがロードされたままになります。(それは呼び出しませんLoadContent。)

ただし、いくつかのあいまいな理由でリセットが失敗する可能性があります。おそらく、デバイスのセットアップ中に行っている悪ふざけが原因です。または、不安定なドライバーか何かである可能性があります。または両方。リセットが失敗すると、XNA はフォールバックしてデバイスを最初から再作成します。

デバイスが最初から再作成されると、すべてのテクスチャとその他のリソースが完全になくなります。XNA が今できる最善のことは、LoadContentメソッドを呼び出して、すべてを再読み込みして続行できるようにゲームが十分に堅牢にコーディングされていることを期待することです。(ゲームをこれほど堅牢にするのは、ささやかな努力であり、その価値はないかもしれません。)

この動作を防ぐ賢明な方法はありません。最初に、フレームごとに呼び出さないことを含め、使用方法をApplyChanges 整理することをお勧めします。- 問題が単純に解決するかどうかを確認します。

于 2012-12-08T10:05:43.520 に答える
0

あなたが提供したリンクは、実際には0であると仮定して関連しています.あなたが提供したリンクで提供された答えgraphics.PreferredBackBufferHeightを使用することで、これが起こらないようにすることができます. また、変更を適用する前に、 の値が 0 より大きいことを確認する必要があります。graphics.PreferredBackBufferHeight

于 2012-12-08T09:19:39.073 に答える