;初期化 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とグラフィックをダウンロード。