画面描写(es_copy)

さていよいよhspdx.dllを使う場合の画面描写です。実はスプライトの機能を使わなければ、変更点はgcopyの代わりにgmodeとes_copyを使うだけです。では「奮闘記」の配列を使って星の動きを制御するのだのスクリプト(若干異なります^^;)を改造してみましょう。やっと「改造記」の名に相応しい状況になってきました(笑)

改造前スクリプトと改造後スクリプトのダウンロード(lzh)
※hspdxfix.dllとhspdxfix.asはご自分でご用意ください

サンプルにはstars.bmpが添付されてます。こんな感じ。


小さくてわかりませんね(笑)左から順に、明るい色から暗い色まで1dotの点がうってあります。ワンブロック5x5の大きさでコピーするようにしています。まぁどんな大きさでもいいんですけど^^;

;DirectX 初期化&チェック
	#include "hspdxfix.as"
	es_ini : es_screen 640,480,8,0
	if stat=1 : goto *dxerr1
	if stat=2 : goto *dxerr2
goto *setting

*dxerr1
	dialog "DirectXの初期化に失敗しました。",1    : end
*dxerr2
	dialog "スクリーンの初期化に失敗しました。",1 : end
*dxerr3
	es_bye : wait 100
	dialog "VRAMの容量が不足しています。",1       : end

;初期設定
*setting
	randomize
	smax=100 			;星の最大数
	dim sx,smax		;星のx軸座標
	dim sy,smax		;星のy軸座標
	dim sc,smax		;星の色
	dim ss,smax		;星の移動速度
	repeat smax
		rnd sx.cnt,635
		rnd sy.cnt,475
		rnd sc.cnt,14
		rnd ss.cnt,4 : ss.cnt++
	loop

;バッファへ画像の読みこみ
	buffer 2,640,480,1
	picload "stars.bmp",1
	es_buffer 0,0
	if stat=1 : goto *dxerr3

;メインルーチンへ行く前の儀式(笑)
	gsel 0
	es_cls
	es_sync
	wait 100
;---------------------------------------------------------------------
;メインルーチン
*main
	getkey returntop,123 : if returntop=1 : end 	;強制終了(F12)
	es_cls 0,0,0
	gosub *stars
	await 0
	es_sync 20
goto *main
;---------------------------------------------------------------------
;流れる星を表示するためのサブルーチン
*stars
	repeat smax
		pos sx.cnt,sy.cnt
		gmode 1,5,5 : es_copy 0,sc.cnt*5,0
		sy.cnt+=ss.cnt
		if sy.cnt>480 : sy.cnt=-5 : rnd sx.cnt,640
	loop
return

hspdxfix.dll対応にする際に変更を加えた箇所はこの色になってます。この色になってる部分が今回の改造のキモです。この*starsのルーチンをもし標準命令で書くとすると、こんな感じです。

;流れる星を表示するためのサブルーチン
*stars
	repeat smax
		pos sx.cnt,sy.cnt
		gcopy 0,sc.cnt*5,0,5,5
		sy.cnt+=ss.cnt
		if sy.cnt>480 : sy.cnt=-5 : rnd sx.cnt,640
	loop
return

このサンプルの場合gcopyをgmodeとes_copyに変更してますが、じつは標準命令の場合もgmodeでコピーサイズを指定しておけるので、実質はgcopyをes_copyに差し替えるだけです。この程度のスクリプトなら、もろもろの準備をしなければならない分、DirectXを使うほうが面倒だったりします^^;

stars.asとstarsdx.asをじっくり見比べてみてください。実行時の見た目は、chgdispで全画面表示をしてるので殆ど差が無いと思います。大きく変更されているのは今までの項で解説してきたDirectX対応にする為の準備部分だけのはずです。そしてこの部分はDirectX対応にする限り、全く同じような形でスクリプトを組むこととなります。

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