2016-05-16 13 views
0

タイトルごとに、私は13hモードで図形を描画する方法を知っていますが、画面上で移動する方法がわからない場合、次は、画面でループの形を再描画すると思っています...しかし、アセンブリを始めたばかりなので、私はTasmで作業します。ご意見ありがとうございます。アセンブリ言語のx86言語で正方形などの図形を移動する方法

+1

改善のためにコードを掲載してください。 –

+1

vsyncを待ちます。画面をクリアします。ドロー。繰り返す。それはあなたが問題を抱えていることを明確にはっきりさせていないので、この質問が終わるのを止めない限り、より具体的にする必要があります。 – Michael

+0

アセンブリの描画は@Michaelの説明と同じです。何か「移動」したい場合は、画面を再レンダリングするのはあなた次第です。私はあなたがマイケルのようにvsyncをクリアして再描画することから始めることをお勧めします。その後、vsyncの変更を上書きするだけでゲームを進めるので、他のことをするためのサイクルを増やすことができます。 –

答えて

2

組み立てにはまったく関係ありません。あなたが13hモードで図形を描く方法を知っているなら、精神的な運動をしてください。あなたが正方形を最初の位置に描いたときにビデオメモリ(a000:0000領域)の内容がどのように見えるかを想像してから、正方形が2番目の位置にあるときのvramの内容を想像してください。

この2つの違いは、形状の移動の効果を達成するために必要な最小限のステップです。画面全体をクリアして形状を再描画すると、それが達成されますが、あなたが想像することができるように、必要な最小値よりも多くの書き込みがvramに書き込まれます。

初期のゲーム開発研究の多くは、遅いCPUで多くのグラフィカルな変更を可能にするために、ほとんど可能な限り最小限の変更を行うために費やされました。一部の初期のコンピュータでは、「画面をクリアする」という単純なものでさえ、ディスプレイ上の単一のフレームよりも時間がかかることがあり、すなわち、「引き裂き」効果なしに画面をクリアすることは不可能であった。このような場合、新しい位置で画面を描画+描画するという単純なアプローチでは、形状の点滅が多く発生します(一部の表示フレームでは形状の代わりに透明な画面が表示されるため)。

二重(トリプル)画面バッファリングによって後で瞬き/引き裂きを回避しました。オフスクリーンメモリバッファーで最終イメージを準備し、古いイメージを表示したまま、できるだけ早くバッファ全体を切り替えますいくつかのgfxカードでは、vramのアドレスを切り替えることができるので、gfxレジスタを設定するのが安いです。いくつかのコンピュータでは、バッファを1バイトずつ宛先にコピーする必要があります。VGA DOS 13hモードでは、別の64k RAM領域に入ることができるか、またはa000セグメントに固定されているため、バッファを2倍にすることはできません)を思い出すことはできません。

もう1つの一般的なアプローチは、すべての移動/変更グラフィック要素の境界ボックスを最初に評価し、更新が必要なvramの領域を計算し、残りの領域のみを完全に再描画し、残りのvramをそのまま維持する。

これはビデオラムの値を操作するだけです。アセンブリ、C、パスカルなどで同じことができます(実際にはjavascript + canvasは同じ方法で動作しますので、すべての原則が適用されます)。 )。現代のgfx APIは通常、塗りつぶしの形、スプライトの描画(スクリーンスプライトバッファからVramへの値のコピー)、ブレンディング(値は単にVramに書き込まれるのではなく、いくつかのブレンディングアルゴリズムなど)

実際に、1つのトリックファミリーは、CPUの高価な操作であるvram自体の値に触れないようにしましたが、パレット値を変更することで動きの錯覚を作り出します(わずか数テント/ http://www.effectgames.com/effect/article.psp.html/joe/Old_School_Color_Cycling_with_HTML5

この質問をしなければならない場合は、画像が表示される方法、ビデオメモリの内容との関連性、およびあなたはそれで何ができるのですか?

Atari 2600仕様のgoogleは、ビデオRAMを一切持たず、ラインごとにビデオチップレジスタを設定してイメージを作り直さなければならなかった間にゲームロジックのこれは、コンピュータが物事をどのように表示するかをさらに深く理解できるようにします。

+1

「asmで* X *をどうやって行うのか」のようにしばしば起こるように、答えは「他の言語と同じです」。私は初心者がすぐに具体的な指示を考えるのに巻き込まれ、実際に何がアルゴリズムやデータの動きを起こしているのかを見直さないでください。 –