| 流れる星空を表示するのだ | ||||||||||||||||||||||||||||
※注:この項の内容ですが、星を流すやり方としては駄目な例です。もっといいやり方を「配列を使って星の動きを制御するのだ」で解説しています。命令の解説自体は間違ってないのですが・・・用法は真似しないで下さい(1枚絵を動かすやりかたとしてはさほど間違いではないのですが)。 (2004年5月7日追記) 今度は、RNDを使って描いた星空を、右から左にスクロールさせてみよう。GCOPYの応用技だな。
新しい命令がいくつか出てきたぞ〜。
「BUFFER」の親戚だね。違いは実際表示する画面かどうかってとこ。「WIDTH」だと大きさと配置しか決められなかったけど、こっちは画面モードの切り替えができるってのが違いみたい。
2番のウィンドウで使った色を、そのまま0番ウィンドウでも使いますよ〜っていう意味でつかってるんだけど、0番ウィンドウに対してのみ、この命令はやらなくてもいいみたい。
0だと普通にコピー(1670万色モードのときに使うのかな?)、1だと高速コピー、2だと高速コピー+(0,0,0)の色が透過するっていう感じらしい。2のモードはキャラの重ね合わせに使えそうだね。
0で描きこむと、画面上では変化せず、1にすると更新すると。つまり今回の場合、赤字になってる部分で星を流してる(コピーする座標をちょっとづつずらして、流れてるように見せる)わけだけど、これを『見える』状態でやるとマヌケだから、『見えない』状態で描きこんでおいて、描き終わったら『見える』ようにするというわけ。キャラクタを動かすときなんかも、描き終わってから『見える』ようにしないと画面がチラチラしてしょうがないみたいね。 ここで納得。文字を動かすプログラムも、「描く」→「見えない部分で消す」→「位置を動かして描く」→「見えるようにする」ってやれば、きれいに動いたんだ。
キャラクタを動かすときなんかは「押してる間だけ動く」っていう感じにしたいわけだから、非トリガータイプキーとして指定するらしい。まぁ今回は「プログラムを停止したいときはESCキーを押す」っていうことをやりたかっただけだから、特に気にしなくてもいいみたい。
HSPの仕様なんだけど、こういう永久ループをさせるときは、必ずWAITかAWAITを入れなきゃだめなのだそうだ。でないと他の入力一切受け付けず、「応答なし」で止まっちゃう^^; ちなみにAWAITは、前回中断した(AWAITした)時からの待ち時間ということになるそうな。つまり、ループの処理を常に一定に保つ効果があるわけだな。リアルタイムのゲームなんかには不可欠でしょ。ちなみに「 AWAIT 16 」だと、だいたい1秒間に60回くらいの処理速度になる。 さて、次はキャラクタを表示させて、その背景で星空をスクロールさせてみよう。いわゆる重ね合わせ処理って奴だな。
| ||||||||||||||||||||||||||||