2017年08月07日

HSPでプログラミング!~第4回・キー操作でキャラクターを動かそう!

~これまでのおさらい
さてさて、第4回です。
今回は、キー操作で、キャラクターを移動できるようにしようと思います。
さて、その前に、キャラクターを動かすことのおさらいをしてみましょう。

・キャラクターの表示位置は、pos文を使って指定する。
・pos文では、ここで設定された数値の位置に表示する。
・pos文では、変数も使うことができる。
・その変数の値を変えてやれば、表示位置も変えてやることになる。

さて、ここまで読んできてピンときませんか?

~stick命令登場!
そう、変数を変えてやれば表示位置も変わる、ということは、キー入力に合わせて変数の内容を変えれば、キー入力で移動させることができますね。例えば、カーソルキーの上を押されたときには、縦位置の変数を4減らす、という具合です。
さてさて、ここでstick命令の登場です!この命令は、カーソルキーやスペースキーなど、ゲームによく使われるキーについて、押されたかどうかの情報を得る命令です。次のような形式で書きます。

stick [変数], [非トリガータイプキー指定]

[非トリガータイプキー指定]については、省略することができます。その場合、[変数]の後のコンマはつけません。
キーが押されると、どのキーを押されたかの情報が、この[変数]に入ります。例えば。

stick a

と書くと、変数aに、押したキーについての情報が入ります。
さて、その情報ですが、次の通り。

左→1
上→2
右→4
下→8
スペースキー→16
エンターキー→32

他にもありますが、たいていのゲームであれば、ここに紹介しただけで事足りるでしょう。複数のキーが押されたときには、押されたキーの数を足し合わせた数が変数に入ります。(例えば、上と右を押した場合には、2+4で6が入る)
次に非トリガータイプキー指定ですが、なんてことはありません。「押しっぱなし」を実装する情報です。
例えば、32を指定した場合、エンターキーを押している間、変数には「エンターキーが押された(つまり32)情報」が入ります。逆にここで指定されなかったキーについては、連打することが必要になるのです。
ここでの指定では、複数のキーを指定する場合には、該当するキーの情報を足した値を設定してやります。例えば、左と右を指定する場合には、1+4で5を指定します。

さてさて、ここまで使い方を説明しましたが、どうすれば、「どのキーが押されたか」を知ることができるのでしょうか?
ここで、「&」というものが登場します!
詳しいことは省略しますが、次のように使うと、「あるキーが押されたかどうか」を知ることができます。

if (変数&キーの数字) {
 押されたときの処理
}

例えば、スペースキーが押されたかどうかをチェックするなら、

stick a
if (a&16) {
 〇△×
}

としてやればいいわけです。

~stick命令を使おう!
さて、ではこのstick命令を使って、第3回でのプログラムを改造してみましょう。

----------------------------
buffer 0
pos 0, 0
picload "mychara.bmp", 1

screen 1, 640, 480

x=0
y=240

repeat
boxf 0, 0, 640, 480
stick key, 15
if key&1:x=x-4
if key&2:y=y-4
if key&4:x=x+4
if key&8:y=y+4
if x<0:x=0
if x>600:x=600
if y<0:y=0
if y>400:y=400
pos x, y
gcopy 0, 0, 0, 32, 32
await 50
loop
----------------------------

まず12行目では、stick命令を使って、変数keyに押されたキーの情報を入れています。
そして13~16行目では、その押されたキーによって、位置を表す変数x、yの値を変えています。
17~20行は、キャラクターの位置が画面から出ないように調整しています。
そしてあとは、pos命令で位置を指定し、gcopy命令で表示させている、というわけです。

さて、説明が終わったところで実行してみましょう。どうですか?
カーソルキーによって飛行機が移動していれば成功です。

次回は、ゲームを作るのに役立つ命令、dim命令、rnd命令、redraw命令について説明していきます。お楽しみに!
posted by 裏編 at 14:25| HSPでプログラミング | 更新情報をチェックする