キー入力でインスタンスを移動

ついにキー入力です!
これがあると一気にゲームらしくなってきますね。

これまで作ってきたオブジェクトの名前をoPlayerとします。
今後もoPlayerに活躍してもらいましょう。

キーの入力状態を取得

oPlayerStep Eventで以下のコードを書いてみます。

input_left  = keyboard_check(vk_left);
input_right = keyboard_check(vk_right);

これだけで、キーボードの左右矢印キーの入力状態を各変数に代入し続けます。
keyboard_check()は引数で渡しているキーが入力されていればtrueを、入力されていなければfalseを返します。

if文で左右移動を作る

既に右移動の処理は実装しました。
しかし入力に対応していないので以下のように改造します。

input_left  = keyboard_check(vk_left);
input_right = keyboard_check(vk_right);

if(input_left)
{
    x -= 1;
}
else if(input_right)
{
    x += 1;
}

以上です。

if文のページで説明していないelse ifについて補足すると、「もし~~なら~~せよ、そうでなくもし~~なら~~せよ」という構文です。
つまり「もし左キーが押されていればx -= 1せよ、そうでなく右キーが押されていればx += 1せよ」という文ができました。

これで、実行してみてください。

左キーを押すと左に、右キーを押すと右に移動するようになりました。

同時に押すと左に行くんですけど

このコードでは左が優先されるので、同時に押すと左に移動します。
それを論理演算子を使って抑制してみます。

input_left  = keyboard_check(vk_left);
input_right = keyboard_check(vk_right);

if(input_left && !input_right)
{
    x -= 1;
}
else if(input_right && !input_left)
{
    x += 1;
}

!input_right!input_leftを追加しています。
もう読めますよね?

「左キーを押していて、右キーを押していない場合・・・」「右キーを押していて、左キーを押していない場合・・・」となっています。
つまり同時押しの処理はありませんので、無視されます。

上下にも動かしてみる

input_left  = keyboard_check(vk_left);
input_right = keyboard_check(vk_right);
input_up    = keyboard_check(vk_up);
input_down  = keyboard_check(vk_down);

if(input_left && !input_right)
{
    x -= 1;
}
else if(input_right && !input_left)
{
    x += 1;
}

if(input_up && !input_down)
{
    y -= 1;
}
else if(input_down && !input_up)
{
    y += 1;
}

全く同じ流れy座標と上キー・下キーに対応しました。

もどる