; ; 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