;
	;	HSP キャラクタ表示サンプル1
	;	( HSP ver2.2e以上で動作します )
	;
 
	wx=640:wy=400				; ウインドゥのサイズ
	screen 0,wx,wy,1			; Windowをパレットモードで初期化
 
	buffer 3,,,1				; 仮想画面をパレットモードで初期化
	picload "testchr.bmp"			; 仮想画面にキャラクタデータをロード
	chrsx=64:chrsy=64			; キャラクタのサイズを指定
	chrx=0:chry=64				; キャラクタのデータがある左上の座標
 
	x=10:y=160				; キャラクタを表示する場所を記憶する変数
 
*chrmove
	;	メインループ(リンゴの絵が左から右へと移動する)
	;	   1. redraw命令で画面の書き換えスイッチをoffにします。
	;	   2. boxf命令で画面をすべてクリアします。
	;	   3. 表示したい絵を描画します。ここでは*chr_drawサブルーチンが
	;             行なっています。
	;	   4. 表示したい絵をすべて描画し終わったら、再びredraw命令で
	;	      画面の書き換えスイッチをonにします。2〜3までの結果は、
	;	      書き換えスイッチがoffになっている間は画面に反映されません。
	;	      (内部的には更新されています)最後に、redraw 1を行なうことで、
	;	      いままでの更新が画面上にも反映されます。こうすることにより、
	;	      画面のちらつきがなくなり、きれいに動きます。また、何より
	;	      速度が2〜3倍以上速くなります。リアルタイムにキャラクタが
	;	      動くソフトなどを作る際には重要なテクニックです。
	;
	gsel 0					; 描画先をID0に
	redraw 2				; 書き換えスイッチOFF
	color 0,0,0				; 画面クリアをする色を指定
	boxf 0,0,wx-1,wy-1			; 画面をクリアする
	a=0:gosub *chr_draw			; 重ねあわせキャラ表示
	redraw 1				; 最後に書き換えスイッチON
	await 20				; 必ずウエイトを入れる
 
	x=x+4					; x座標を4ドット右にずらす
	if x>540 : x=0				; 右まできたら、また左に戻す
 
	goto *chrmove				; 無限にループさせる
 
*chr_draw
	;	重ねあわせキャラクタ描画ルーチン
	;	( 変数x,yの座標に変数aのキャラNo.を表示する)
	;
	pos x,y					; カレントポジションを変数x,yの場所に設定
	gmode 2,chrsx,chrsy			; 重ねあわせモードとコピーサイズの設定
	gcopy 3,a*chrsx+chrx,chry		; 重ねあわせコピーを実行
	return					; サブルーチン終了
 
back