3

私はCOSMOSコンパイラを使用してC#でOSを記述しています(COSMOSがILコードをx86アセンブリに変換することを知らない人向け)。GUIを作成しています。
以前にGUIを作成しましたが、現在はダブルバッファーを作成しようとしています。
かなり簡単に聞こえますが、以下が私の問題です。ライブラリ
のメソッドSystem.Drawingや、p/呼び出しを使用する他の名前空間を使用できません。また、多次元配列は使用できません(通常の配列は使用できます)。だから私の質問は、どのようにダブルバッファを実装するのでしょうか?
私はそれをした誰かを知っているのでそれが可能であることを知っています。

さらに、私が持っている唯一のグラフィカル関数は、、SetPixelおよびGetPixelですClear。私は答えを好みますが、ダブルバッファリングなどに関する良い記事を知っている人がいたら教えてください。
PS。320 x 200ResLOLの私のOS

4

3 に答える 3

4

DOSCVGAゲームの伝承を少し学ぶ必要があります;-)

ダブルバッファリング、ページフリッピング、およびアンチェーンモードを参照してください。同じ概念がすべて当てはまりますが、C#コードにどのように変換されるかはわかりません。

ハッピーコーディング。

于 2011-07-30T19:02:15.743 に答える
1

System.Drawing.BufferedGraphicsにアクセスできるかどうかを確認してください。その目的のためのメソッドを実装します。それ以外の場合は、手動で行う必要があります。

通常、画面に直接描画すると、描画されている内容がユーザーに表示されます。アレックスにリンゴを描くように頼んだときのようなものです。彼がペンでリンゴを描いている間、あなたは彼を調べます。アレックスに赤いリンゴを描いてから消してから青いリンゴを描いてから消してから黄色いリンゴを描くように頼んだら…毎回彼がそれを消している間あなたは彼を見ているでしょう。このように考えてください:コンピュータは速いアレックスです。したがって、高速アニメーションを画面に直接描画するように要求すると、ユーザーはアニメーションフレーム間で何かが起こっていることをマークします。ちらつきが悪いです。

ちらつきの解決策は、ダブルバッファリングです。バッファは、描画に使用されるメモリの画面外の領域にすぎません。ダブルバッファリングを使用する場合、画面に直接描画する代わりに、ビデオメモリにあるバックバッファに描画してから、バッファ全体を画面にコピーします。

于 2011-07-30T19:11:20.260 に答える
0

ダブルバッファリングは、(ディスプレイではなく)プロットする配列を使用し、(プロットが終了したときに)アレイをディスプレイにブリットすることで実装できます。

于 2011-07-30T19:03:12.530 に答える