その14 マップ表示(2)

	;初期化
	alloc map,2000
	;グラフィックの読み込み
	buffer 1,100,100,1
	picload "kusa.bmp"
	buffer 2,100,100,1
	picload "mizu.bmp"
	;画面の切り替え
	gsel 0
	screen 0,600,480,1
	cls 4
	wide=16	;マップの横サイズ
	map=    "0001111000000000"
	map=map+"0000000000100000"
	map=map+"0011111000100000"
	map=map+"0000000100100101"
	map=map+"0000000100100101"
	map=map+"0000001000100000"
	map=map+"0000110000010010"
	map=map+"0000000000001100"
	map=map+"0000100000010000"
	map=map+"0111111011111110"
	map=map+"0000100000010000"
	map=map+"0111100000010100"
	map=map+"0100100001111100"
	map=map+"0111100010011010"
	map=map+"0000100010011010"
	map=map+"0000100001101010"
	repeat 10
	repeat 8:mox=0:moy=cnt:gosub *allmap:loop
	repeat 8:mox=cnt:moy=8:gosub *allmap:loop
	repeat 8:mox=8:moy=8-cnt:gosub *allmap:loop
	repeat 8:mox=8-cnt:moy=0:gosub *allmap:loop
	loop
	stop
*allmap
	redraw 2
	i=0
	repeat 8
	cty=cnt
	i=(moy+cnt)*wide+mox
	 repeat 8
	 peek code,map,i
	 i++
	 if code='0':pb=1
	 if code='1':pb=2
	 pos cnt*32,cty*32
	gcopy pb,0,0,32,32
	 loop
	loop
	redraw 1
	await 1
	return

マップ表示スクリプト拡張版です。

32x32ドットのキャラクターを使って、8x8のマップを表示しますが、
16x16のマップデータ内の一部を切り取って表示しています。

mox,moyでマップ上の位置を決めています。
wideはマップの幅です。

repeat命令で切り取る座標を変えていくことで、スクロールを実現しています。
また、グラフィックを表示するときにredraw命令で高速化を図っています。
画面を書き始める前に「redraw 2」で画面描画を停止。
その間に画面への書き込みを行います。

実はマニュアルでは「redraw 0」で画面描画を停止すると説明されていますが、 0を指定すると、描画停止の前に1度画面転送を行います。

2を指定すれば、その描画1回を短縮できます。
サブルーチンの終わりに「redraw 1」で描画を再開します。
どんな風に変化するかは、自分で実験して見てください。

map2.asとグラフィックをダウンロード。


その15に行く

目次に戻る