« [奮闘記]流れる星空を背景に、静止したキャラを表示するのだ | トップページ | [奮闘記]配列を使って星の動きを制御するのだ »

[奮闘記]流れる星空を背景に、自分が好きなように動かせるキャラを表示するのだ

よし、いよいよ自機を動かずぞ~!

と言っても、細かい計算なんかは先人の知恵を拝借した方が良さそうなんで、MIAさんのページに載ってた解説をそのまま利用させていただくことにしました。深謝。


SCREEN 0,600,400,1,100,50,600,400
CLS 4
RANDOMIZE
MX=300 :MY=200 ;自機の初期位置を指定
MOVE=2 ;自機の移動速度を指定

;バッファー3に星空の絵を描きこみ
BUFFER 3,600,400,1
COLOR 0,0,0 : BOXF 0,0,600,400
REPEAT 1000
RND X,600 : RND Y,400
RND R,7 : RR=(R+1)*32-1
RND G,7 : GG=(G+1)*32-1
RND B,7 : BB=(B+1)*32-1
COLOR RR,GG,BB
PSET X,Y
LOOP
BUFFER 4,600,400,1

;バッファー2に自機の画像を描きこみ
BUFFER 2,600,400,1
POS 0,0 : PICLOAD "myship.bmp"


;描画画面の準備
GSEL 0 : COLOR 0,0,0 : BOXF O,O,600,400
PALCOPY 3
POS 0,0 :GCOPY 3,0,0,600,400 ;星空を複写
POS MX,MY :GCOPY 2,0,0,32,32 ;自機画像を複写

;メインルーチン
*MAIN
REPEAT 400
REDRAW 0
GOSUB *HAIKEI
GOSUB *JIKI
REDRAW 1
STICK K : IF K=128 : END
AWAIT 16
LOOP
GOTO *MAIN

;流れる星を表示するためのサブルーチン
*HAIKEI
GMODE 1,600,400
GSEL 4
POS 0,0 : GCOPY 3,0,0,600,400 ;現在の画面を保存

GSEL 3
POS 0,0 : GCOPY 4,0,399,600,400
POS 0,1 : GCOPY 4,0,  0,600,399

GSEL 0
POS 0,0 : GCOPY 3,0,0,600,400
RETURN

;自機を動かすためのサブルーチン
*JIKI
STICK PAT,15
XV=(PAT>>2&1)-(PAT&1)
YV=(PAT>>3&1)-(PAT>>1&1)

MX=XV*MOVE+MX : MY=YV*MOVE+MY
IF MX<0   : MX=O
IF MX>566 : MX=566
IF MY<0   : MY=0
IF MY>364 : MY=364

POS MX,MY : GMODE 2 : GCOPY 2,0,0,32,32
RETURN

なんと今回は、新しい命令一つもなし。そのかわり、何やら難しげな条件判断が(赤い部分)。ここはMIAさん曰く、「こういうふうにやるもんだと暗記しちゃいましょう」とのこと。要は変数PATを調べて、自機の移動方向を決定するための公式らしい。で、次の行で自機の座標(MX,MY)を決定すると。移動速度をわざわざ変数(MOVE)にしたのは、後々スピードアップアイテムを登場させるため。なんて読みが深いんでしょ(笑)

あと、緑の部分の条件判断は、自機がウィンドウからはみださないようにするため。ウィンドウサイズが600×400なんで、右端と下端は若干少なめに設定してある。これは、カレントポジションを左上にした32×32のキャラを表示させてるから。

ちなみに最初に真っ黒な背景で動かしたら、自機のかけらが残っちゃったんだけど、今回の場合毎回背景の描きこみをしてるから、自動的に消えちゃうんだよね。なんか案ずるより生むが易しって感じ。無駄なことしないですむってのはいいよね。

« [奮闘記]流れる星空を背景に、静止したキャラを表示するのだ | トップページ | [奮闘記]配列を使って星の動きを制御するのだ »

1.奮闘記」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/67538/57445597

この記事へのトラックバック一覧です: [奮闘記]流れる星空を背景に、自分が好きなように動かせるキャラを表示するのだ:

« [奮闘記]流れる星空を背景に、静止したキャラを表示するのだ | トップページ | [奮闘記]配列を使って星の動きを制御するのだ »