1

メソッドでグラフィック設定を設定し、Initialize次にメソッドで設定すると、次のUpdateようになります。

protected override void Initialize()
{
    graphics.ApplyChanges();
    base.Initialize();
}

protected override void Update(GameTime gameTime)
{
    graphics.ApplyChanges();
    base.Update(gameTime);
}

すべて順調。

ただし、次のようにコードをLoadContentメソッドに移動すると:

protected override void LoadContent()
{
    spriteBatch = new SpriteBatch(GraphicsDevice);
    graphics.ApplyChanges();
}

protected override void Update(GameTime gameTime)
{
    graphics.ApplyChanges();
    base.Update(gameTime);
}

私は得るInvalidOperationException

EndScreenDeviceChange を呼び出す前に、BeginScreenDeviceChange を呼び出す必要があります

私は両方で同じことをしているので、これはあまり意味がありません。LoadContentメソッドは単にメソッドの後に呼び出されたというのが私の理解でしたInitialize。を台無しにするこれらの呼び出しの間に何が起こっていGraphicsDeviceManagerますか?

4

1 に答える 1

0

XNA の内部配管の一部を台無しにしています。GameWindow通常、XNA は、正しいペアリングを使用して、グラフィックス デバイスが作成/破棄されたときにこれらのメソッドを呼び出すイベントをフックする必要があります。しかし、グラフィックス デバイスを変更してはならない場所で変更しているため、何らかの理由でエラーが発生しています。

特定のケースに関する質問に答えるには: 何が起こっているかというと、これらのイベントを設定したbase.Initialize()に呼び出すことです。への呼び出しは、イベントが接続される前から後に移動しました。LoadContent ApplyChanges

どちらのバージョンのコードも正しくないため、問題ではありません。最初のバージョンで動作するように見えるのは幸運です。グラフィックス デバイスを正しく設定および変更する方法を説明しているこの回答を参照してください

于 2012-12-04T09:02:36.947 に答える