ウィンドウが伸びないようにサイズを変更しながら、レンダリングと更新を続けることさえ可能ですか?
1 に答える
Game
これは、XNA のクラスの動作にかなり深く組み込まれています。私は今まさにこの問題に取り組んでいますが、まだ良い解決策がありません。編集:私はどのようにして解決策を見つけましたか-しかし、スケーリングについては少し答えていません-したがって、ここに質問/回答のペアとして投稿しました。
リフレクションを使用して飛び込み、サイズ変更を開始したときにゲームのタイマーを一時停止するイベントを切断する (停止すると一時停止を解除する) ことができます。私はまだこれを試していません。そもそもなぜそれらが存在するのかを理解せずにそれを行うのは少し嫌です。
(個人的には、ゲームをサイズ変更の開始/終了イベントにもサブスクライブさせ、Update
XNA が戻ってくるまで適切なタイマーをオンにすることを考えています。ディスプレイのスケーリングについて心配するつもりはありませんでした。)
この問題を回避する 1 つの方法は、Game
クラスを完全に置き換えることです。XNA WinForms サンプルは適切な代替手段を提供しますが、独自の Draw/Update ループとタイミングを実装する必要があります。これを古いレベルのエディターでテストしたところ、サイズを変更しても思いどおりに機能します。
ウィンドウを大きくすると、ウィンドウを大きくするためにバックバッファを常に再割り当てするため、かなり遅くなります。その動作を置き換えて、バックバッファー サイズを過剰に割り当てるようにすることで、頻繁に再割り当てされないようにすることができます。
根本的な問題は win32 に関係しており、GameDev.netのこのスレッドで詳細に説明されています。しかし、それは実際に満足のいく解決策を提供するものでもありません。
WinForms サンプルがそのOnPaint
メソッドを利用していることに注意してください (そして、常に を呼び出すとループが発生しますInvalidate
)。一方、XNA の組み込みGame
クラスはApplication.Idle
.