ご愛顧いただいたOsask-Wikiでしたが2016/9/30をもって終了・凍結としました。ページの内容やボタン等に編集可能だった時の名残りが残っておりますが新たなページ設置や内容の変更等はできません。このドキュメントは、"mt_xor1.c"の説明だけをするものです。最初に読むべきドキュメントではありません。最初に読むべきドキュメントは"document.txt"です。"mt_xor0.c"との違いは32ビットグラフィックボックスを使うことです。今まで説明してきた描画方法は点を打つとか線を引くというものでした。実際のプログラムでは、もっと込み入ったことがやりたいというのはよくあることです。その場合、あたかもビデオメモリにアクセスするように自由に読み書きできれば、なにかと便利でしょう。・・・ここでは、そういうアクセス方法を説明します。このアクセス方法は2つの手順で構成されます。指定されたバッファ内に自由に読み書きします。このバッファはグラフィックボックスに対応しており、4バイトが1ドットになっています(パックドピクセル)。一通りのアクセスが済んだらいじった部分をflushします。flushというのは、メモリ内のバッファの内容を画面に確実に反映させる方法だと理解してください。この操作をしなくてもOS側の都合でバッファの内容が画面に反映されることはありますが、それは保証されていないことですのであてにはできません。いじったら必ずflushしてください(リードアクセスしかしていないときはflushしなくてもよい)。4がそっくりそのままバッファになっています。詳しいことはソースをご覧ください。このプログラムはその方法でたくさんの点を描画して、ちょっとした「山」を描きます。引数の型については、guigui00.hを参照してください。グラフィックボックスをflushします。optは0x8024にしてください。winはグラフィックボックスが所属するウィンドウです。残りのパラメーターが少々ややこしいです。16という風に指定します。いじった範囲がグラフィックボックスのごく一部であるという場合もよくあるでしょう。そんなときこのような全範囲flushをすると処理時間においてかなりの無駄になります。そんな時は部分flushを使います。yで指定した座標に相当するドットを指し示すintポインタこれをよくご覧になれば分かるように、結局は全範囲flushも部分flushも同じルールです。画面内でキャラクターが走っているとすれば、まずはバッファにアクセスして、元いた場所を背景に戻して移動先にキャラクターを書き込むでしょう。flushすることになります。この場合、移動距離がある程度あれば、flushは2回やるべきです。移動元の部分と移動先の部分です。移動元と移動先を含むような広範囲のflushを1回やることでももちろん代用できますが、flushはOSにとって高負荷な処理です。できるだけ狭い範囲に分解してやりましょう。・・・この時以下の2つの方法のどちらがいいかと迷われるかもしれません。移動先flushもちろんどちらの手順でも問題なく実行できますが、どちらかといえば2.の方がおすすめです。いうのは、結局画面に反映されるのはflushの時なので、2.の方法の方がキャラクターが画面上から消えている時間が短くて済むせいです。複数のキャラクターが介在しているのなら、まずはバッファ内の書き換えを集中させ、その後にflushを集中的にやる方が良いでしょう。このバッファへのアクセスとflushを使えば、かなり自由にグラフィック処理ができるはずです。flushの際にはVRAMへアクセスすることになり、これは結構重たい処理です。広い範囲を細かい時間間隔でflushするのは今のところやらない方がいいでしょう。いう見栄えのするゲームは、OSASKがグラフィックアクセラレーターを使いこなせるようになるまではちょっと無理かもしれません。・・・それでもマシンパワーのあるマシンなら、なんとかゲームにはなるかもしれません。3.いじり終ったら、バッファをflushしなければいけない。}}Kの落書きこんなのをそのうち<guigui00.h>に追加しようと思います。LIB_GBOX_BUF(gbox))#endifたぶん僕の言う「そのうち」はなかなかこないので、上記をコピーして自分のソースに貼り付けてもいいです。修正した説明(案)説明がt_xor0と重複しすぎていて、読み手が飛ばし読みをする恐れがあったので、違いのみをピックアップして書き直しました。このドキュメントは、"mt_xor1.c"の説明だけをするものです。最初に読むべきドキュメントではありません。最初に読むべきドキュメントは"document.txt"です。このmt_xor1は、mt_xor0の改造版に相当します。違いは8ビットグラフィックボックスではなく32ビットグラフィックボックスを使うことです。mt_xor0を理解してから読んでください。4がそっくりそのままバッファになっています。詳しいことはソースをご覧ください。bit24-31:リザーブで必ず0となっています。8bitグラフィックボックスと同様に、自由に読み書きして、必要に応じてflushしてください。引数の型については、guigui00.hを参照してください。グラフィックボックスをflushします。optは0x8004か0x8024にしてください。winはグラフィックボックスが所属するウィンドウです。残りのパラメーターが少々ややこしいです。LIB_GBOX_BUF32(gox)という風に指定します。32ビットグラフィックボックスで部分フラッシュをすることもできます。その場合は次のように引数を指定します。optの違いについてですが、通常は0x8004を使います。色表現力が犠牲になってもいいから、速度を速くしてほしいという場合に限って(もしくはすべての画面モードで細い線がタイリングで点線に化けたりするのが不都合な場合)、0x8024を指定します。これをつかえば8ビットグラフィックボックスでは得られなかった高い表現力が得られるでしょう。今のところ(完成度が低いせいで)32ビットグラフィックボックス内でラインを引くなどができませんが、それでもバッファに書いてflushすれば、一応どんな絵でもかけます。ラインなどの基本描画機能のサポートはもうしばらくお待ちください。Kの視点で改良したソース。19:56このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。このサイトに関するお問い合わせは掲示板にお願いいたします。