HSP3 ゲームのプログラミング | |
(1) キャラクタ(文字)の移動
文字や画像のアニメーション手法について学習する。
(move11.hsp)
文字「○」をウィンドウの左から右へ移動させる。
x = 0 : y = 100 ;初期座標設定(開始位置) dx = 5 : dy = 0 ;移動量の設定 repeat color 255, 255, 255 ;※1 白色。背景と同じ色。 boxf ;※1 ウィンドウと同じサイズの四角形を塗りつぶしで描画する。 color 0, 0, 0 ;※2 黒色 pos x, y ;※2 カレントポジションを座標(x, y)に設定する。 mes "○" ;※2 ○を表示する。 x = x + dx ;※3 x座標加算 y = y + dy ;※3 y座標加算 if x > ginfo_winx : break ;※4 無限ループ終了 await 100 ;無限ループの時のお約束 loop stop
「○」がウィンドウの左から右へ移動するように見える。
処理の手順は、(※1)画面消去、(※2)指定座標に文字を表示、(※3)座標の計算、である。
「消しては書いて」を繰り返すことでアニメーションを実現している。実際のテレビや映画でも基本的に同じ手法で映像を表示している。
※4のシステム変数ginfo_winxはウィンドウ横幅のサイズ(ドット)である。座標xの値がウィンドウ横幅のサイズを超えたら、break命令で無限ループを抜け出す。無限ループを抜け出した後は、stop命令が実行される。
移動量dxを10に増やす。 → 移動スピードが速くなる。(リスト)
移動量dyを10に増やす。 → 斜め右下方向に移動する。(リスト)
await命令の値を200に増やす。 → 移動スピードが遅くなる。(リスト)
(move12.hsp)
文字「○」をウィンドウの左から右へ移動させる。左右の壁(枠)ではね返るようにする。
x = 0 : y = 100 ;初期座標設定(開始位置) dx = 5 : dy = 0 ;移動量の設定 repeat color 255, 255, 255 ;※1 白色。背景と同じ色。 boxf ;※1 ウィンドウと同じサイズの四角形を塗りつぶしで描画する。 color 0, 0, 0 ;※2 黒色 pos x, y ;※2 カレントポジションを座標(x, y)に設定する。 mes "○" ;※2 ○を表示する。 x = x + dx ;※3 x座標加算 y = y + dy ;※3 y座標加算 if x > ginfo_winx : dx = -dx ;右壁超えた。移動量正負反転。 if x < 0 : dx = -dx ;左壁超えた。移動量正負反転。 await 100 ;無限ループの時のお約束 loop stop
「○」がウィンドウの左右に移動するように見える。
壁を越えたとき、移動量の正負を反転すると移動方向が逆になる。
右の壁で、はね返るとき、一旦、文字「○」が消える。「○」はpos命令で指定した座標(x, y)に表示されるが、この座標(x, y)は文字の左上の座標(図参照)なので右壁に消えたようになる。条件式を「x
> (ginfo_winx - 8)」に変更すると壁ではね返るように見える(-8の値は調整が必要である)。
左壁も同じように、少し壁にめり込んではね返るように見える。変数xの値が0になったときには移動量dxの正負は反転しないで、-5になったときに正負が反転する。この状態を解消するには条件式を「x
<= 0」に変更し、変数xが0のときに移動量が反転するようにする。
(move91.hsp)
文字「○」を斜めに移動させる。上下左右の壁ではね返るようにする。
・初期座標は、(x, y) = (100, 100)とする。
・移動量は、dx = 8、dy = 8とする。
・ウィンドウ縦幅のサイズは、システム変数ginfo_winyで参照できる。
・はね返るときの移動量の正負については図を参照すること。上壁と右壁は考えよ。
2007 © Hiroshi Masuda |