0

各フォームに多くの描画/アニメーションを含む異なる/単一のフォームを使用して.NET CFでアプリケーションを作成する必要があります。 [J2ME Gaming Code] があまり変更を加えずに機能するように、さまざまな状態を示します。いくつかの可能なシナリオにたどり着きました。どれが完璧になりますか?

  1. 単一のフォームを用意し、コントロールを手動で追加/削除してから、ゲームループのトリックを使用します。
  2. コントロールを含むさまざまなフォームを作成し、メイン スレッドで update と application.doEvents() を呼び出します。[ while(isAppRunning){ UPDATE() Application.DoEvents() }
  3. 必要に応じて、各フォームで update - paint ループを作成します。
  4. その他のアイデア。

これに関する提案をお願いします

4

1 に答える 1

1

ゲームの場合は、ほとんどのフォームを削除して必要最低限​​の要素で作業し、可能であればビットマップを処理して、メイン フォームのペイント メソッドまたはその中にあるコントロール (おそらくパネル) をオーバーライドしてレンダリングします。これにより、パフォーマンスが向上します。

主な問題は、コンパクトなフレームワークが多くの UI の楽しみのために実際に設計されていないことです。完全なフレームワークのように無料でダブルバッファリングを取得できません。適切な透過性は、WinForm コントロールで行うには難しいことです。 UI スレッドが少し長すぎると、深刻なレンダリングの不具合が発生します。バックグラウンドスレッドでやりすぎると、それらを取得することさえあります! :O

Application.DoEvents を明示的に呼び出しても最適なパフォーマンスを得ることはできません。私の経験則では、トラブルシューティングを行ったり、UI で小さなハックを作成したりする場合にのみ使用します。

ゲームをバックグラウンド スレッドに固定してから、コントロールで .Invoke を呼び出してメイン UI スレッドにマーシャリングしてディスプレイを更新し、ユーザー入力を処理しながら応答するための十分な時間を UI に残すことをお勧めします。ユーザー入力は、通常の winform コントロールを避けるもう 1 つの理由です。モバイル デバイスには一般に多くのキーがないため、それらを再マップできると非常に便利です。

また、新しいフォームを表示すると微妙な一時停止が発生する可能性があるため、別のフォームを使用することも避けます。通常、ビジネス ソフトウェアを作成するときにこの問題を回避するために、コントロールをメイン フォームに交換します。

結局のところ、さまざまな手法を試して、何が最適かを確認することはおそらく価値があります。また、私は基本的に業務用ソフトウェアしか扱っていないので、CF でゲームを開発している人々からヒントを得ることができるかどうかを確認してください。

チッ!

于 2008-09-17T18:46:27.310 に答える