マウスとかボタンを取得する話です。 キーは「キー状態」の命令で取得できます。
キー状態は1フレームに1回だけ
ゲームで同じキーを1フレーム内に複数回取得するのは得策ではありません。 1回だけ取得して変数に入れておき、操作で条件分岐するときは変数のほうを参照します。
たとえば右を押したら主人公と敵の両方が右に動くようにしたい時。
//よくない例
もしキー状態(右キー)==1ならば、主人公移動("右")
もしキー状態(右キー)==1ならば、敵移動("右")
主人公移動("右")を処理している間に右を離したら、主人公と敵は同じ動きになりません。
確実に連動させたいなら右キーの取得は1回にする必要があります。
マウスのX,Y、ボタンの取得
ボタンの状態はキー状態(1)、キー状態(2)でそれぞれ左ボタンと右ボタンです。
どうでもいいですが、マウスボタンは左利き用にするとクリック=右ボタンになります。
画面に「クリックでスタート」と表示しておいてキー状態(1)で分岐すると変な人からクレームが来ます。
キーとマウスの取得サンプル
裏イメージとはイメージ
そのサイズは「0,0,600,400」
その可視はオフ
裏イメージを画面クリア
表イメージとはイメージ
そのサイズは「0,0,600,400」
表イメージを画面クリア
■マウス
・X
・Y
・押
・離
・右押
・右離
キーとはハッシュ
//毎フレーム呼ぶ
●キー操作取得
keyとは変数
keyを1から255まで繰り返す
もしキー状態(key)==1ならば
キー@key = キー@key+1
違えば
キー@key = 0
//マウス関連
マウス.離 = (マウス.押>0) && (キー@1==0)
マウス.押 = キー@1
マウス.右離 = (マウス.右押>0) && (キー@2==0)
マウス.右押 = キー@2
xyとは変数
xy=母艦ハンドルの0,0を窓ハンドル画面座標計算
マウス.X=机上マウスX - (xyから「,」まで切り取る)
マウス.Y=机上マウスY - (xyから「,」まで切り取る)
●キー情報表示
txtとは変数
txtに(マウスのメンバ詳細列挙)を一行追加
keyとは変数
keyを1から255まで繰り返す
txtに(キー@key>0)を追加
txtに「 」を追加
もしkey%16==0ならば,
txtに改行を追加
裏イメージの,5,5へtxtを文字表示
//ゲームループ
1でループ
キー操作取得()
キー情報表示()
裏イメージを表イメージの0,0へ画像コピー
裏イメージを画面クリア
0.04秒待つ
●キー操作取得について。
1~255のキー状態をハッシュにいれます。
押しっぱなしにしていたらどんどん+1して、離していたら0にします。
キー@key = キー状態(key)
などとすると分岐するときに困ります。(長く押している最中か押した瞬間かの判断がつかない)
マウスのほうは怪しげなことをしているので解説。
まず■マウスのグループにX,Y,押,離,右押,右離のメンバがあります。
それぞれXY座標とボタンの押している/離した瞬間であるを記録しておくところです。
ゲームではマウスボタンを離した瞬間を決定とする作りが多いです。
「前回が押している(マウス.押>0)
」かつ「今回離している(キー@1==0)
」が「マウスを離した」ということです。
次がマウスのXY座標の計算。
母艦ハンドルの0,0を窓ハンドル画面座標計算
で母艦の描画領域の左上が取れるみたいなので、机上マウスXとかから引けばいいみたい。
……うちの環境ではこれで動いてるよ!
●キー情報表示について
(キー@key>0)を文字表示しているので実際の値ではないです。
キーボードを適当にさわるとどこかが反応するはず。
最後がゲームループ。
0.04秒ごとにキー1~255とマウス情報を更新して描画します。
実際のゲームでは
もしマウス.離==1ならば
とか もしキー@90/*Z*/==1ならば
とかで操作を反映していきます。