画像の準備

続いて使用画像の準備です。奮闘記にも登場したバッファローマン(をい)。DirectXを使う場合、通常のHspのバッファー以外にオフスクリーンバッファというのを用意することになります。言ってみれば悪魔超人のバッファローマンとキン肉マンの仲間になったバッファローマンの2種類がいるようなもんです(余計わかりづらい)。

通常のHspの画面描写
標準命令の場合

通常のHspの場合、上記のようにコピーする画像をbufferに入れておき、そこからscreenへgcopyで転送するという手法が一般的だと思います。これにredrawを組み合わせると高速な描写が可能になるというわけです。

hspdx.dllを用いた場合、DirectX専用のオフスクリーンバッファを作り、通常のバッファーからes_bufferで転送して、そこから画面上にコピーなどを行う形になります。

その際注意しなければならないのが、HspのDirectXは16bitカラーに対応していないという事です。つまりpicloadでbuffer→es_bufferで転送する元の画像は256色以内(本当は236色)に抑えておきましょう。「D-Pixed」等の256色お絵かきソフトを使って減色するのが一番いいかな?

hspdx.dllの画面描写
hspdx.dllの場合


;■ バッファへ画像の読みこみ
	buffer 2,640,480,1			;バッファ作成
	pos 0,0 : picload "sampledx.bmp",1	;バッファへ読み込み
	es_buffer 0,0			;オフスクリーンバッファへの転送
	if stat=1 : goto *dxerr3		;成否判定

es_screenで初期化したサイズと、es_bufferで確保するサイズは同じ大きさになるので、解像度を320x240にした場合は、bufferのサイズは320x240以上にはできません。また、マニュアルにはオフスクリーンバッファは10枚取れると書いてありますが、実は8枚までしか取れないというバグがあります。これもhspdxfix.dllを使うことで解決できます。最新のバージョンでは64枚まで取れるようになってるので、画像をたくさん使う場合でも対応可能です。

このオフスクリーンバッファへの転送は、メインルーチンではやらないほうが無難だと思います。リアルタイムで画面描写してる最中に転送を行うと、やっぱりその瞬間ウェイトがかかってしまうはずです。シューティングゲームなら面と面の間にやるとか、初期設定の段階で全部用意しちゃっておく方がいいでしょう。私の場合、途中での読み込みをやるとわけわからなくなるという理由でやってません^^;

前へ戻る 改造記メニューへ戻る 次へ進む