【Prominence3D】もよろしく!!
あのRPGツクールの開発部もおすすめする
2Dゲーム用の3Dエフェクト作成ソフト!!
無料体験版を是非触ってみてください!!
トップページ > HSPのひきだし > 自機の操作
2013年04月07日

自機の操作

Pocket

キー入力

さて、とりあえず無条件で●を右に移動させましたが、
本来はキーボードの「→」を押した時に右に移動するはずです。

そのへんを作ってみましょう。

まず、次の1行を追加します。

    ;自機移動
    stick key
    player_x = player_x + 5

stickは、押されているキーの番号を変数に代入する命令です。

keyは変数の名前なのでkeyじゃなくてもOK。

何もキーが押されてなければ変数keyには0が代入されます。

もしキーボードの「←」が押されてればkeyには1が代入され、
同様に「↑」なら2、「→」なら4、「↓」なら8が代入されます。

詳しくはヘルプ(stickにカーソルを合わせて「F1」キー)を見てみましょう。

カーソルキー以外のボタンを押したときの番号も記されています。

ちなみに、二つのキーを同時に押した場合はどうなるでしょうか。

たとえば「←」なら1、「↑」なら2ですが、
この2つを同時に押すと3が代入されます。

さて、「→」が押されたとき、つまり変数keyが4だったときに
●が右に移動すればいいわけですから、プログラムは次のようになります。

    ;自機移動
    stick key
    if(key = 4){       ;→を押した
        player_x = player_x + 5
    }

実行して「→」を連打してみてください。

少しずつ右に移動していきますね?

同様に「←」「↑」「↓」を押した時の処理も書きましょう。

    ;自機移動
    stick key
    if(key = 4){       ;→を押した
        player_x = player_x + 5
    }
    if(key = 1){       ;←を押した
        player_x = player_x – 5
    }
    if(key = 2){       ;↑を押した
        player_y = player_y – 5
    }
    if(key = 8){       ;↓を押した
        player_y = player_y + 5
    }

これでキーを押した方向に移動するはずです。

player_xが増えれば右、
player_yが増えれば下に移動するというのはわかりますか?

 

押しっぱなし

●を自由に動かすことはできましたが、
連打しないと動かないのでは操作しづらいですね。

現状ではキーを押した瞬間しか変数keyに値が代入されていません。

キーを押しっぱなしにしても値が代入されるようにしましょう。

【メモ】
この資料では、現状のように連打しなければいけない状態を「押しっぱなし無効」、
押し続けている間は値が代入される(連打してるのと同じ)状態を「押しっぱなし有効」と呼ぶことにします。
(正式には「トリガータイプキー」「非トリガータイプキー」とか言うみたいです)

先ほど書いたstick命令は変数名しか指定していませんでしたが、
2番目のパラメータで「押しっぱなしを有効にするキー」を指定することができます。

具体的には、キーを押したときに変数に代入される値…
つまり→なら4、↑なら2を指定すると、そのキーは押しっぱなし有効になります。

今回は→←↑↓の4つを指定したいので、こういう場合はすべてを足します。

要するに、4+1+2+8=15ということで、「15」を指定します。

    ;自機移動
    stick key, 15
    if(key == 4){ ;→を押した
        player_x = player_x + 5
    }

これで、カーソルキーは連打しなくても移動できるようになりました。

【メモ】
どんな時も押しっぱなしを有効にすればいいというわけでもありません。
たとえばRPG等のメニュー画面を作っていたとしましょう。
キーボードの↑↓でカーソルが移動するわけですが、この場合押しっぱなしを有効にしたらどうなるでしょうか?
押しっぱなし有効にするということは「押し続けている間は1秒間に60回連打する」のと同じことになります。
ということは、カーソルを1つ下の段に移動させるには1/60秒間だけ↓キーを押さないといけないということになります。
こういう場合は、素直に↓を連打しないとカーソルが動かないようにした方が操作しやすいですよね?

 

斜め移動

まだ問題があります。

上下左右には移動できるようになりましたが斜め移動ができません。

上に書いた通り、「←」と「↑」を同時に押したときのkeyは3になります。

しかし、keyが3だった時にどうするかというプログラムは書いてないですね。

この状態を打破する方法は2つあります。

一つ目は、単純にキーが2つ押された時の処理を追加する方法。

つまり・・・

    if(key = 3){     ;←↑を押した
        player_x = player_x – 5
        player_y = player_y – 5
    }

という感じで斜め4方向分の処理を書きます。

ですが、今回は違う書き方をします。

すでに書いてあるif文の「=」の部分を「&」に書き直してください。

    ;自機移動
    stick key, 15
    if(key & 4){ ;→を押した
        player_x = player_x + 5
    }
    if(key & 1){ ;←を押した
        player_x = player_x – 5
    }
    if(key & 2){ ;↑を押した
        player_y = player_y – 5
    }
    if(key & 8){ ;↓を押した
        player_y = player_y + 5
    }

「key = 4」は「keyが4だったら」という意味ですが、
「key & 4」は「keyに4が含まれていたら」というような意味です。

このように書けば、たとえば←と↑を押していれば
「key&1」と「key&2」が両方成り立つので、左に移動して上に移動します。

結果として左上に移動することになります。

「&」はキー入力時のif文以外ではほとんど使うことはないと思います。

キー入力時の特別な記述と思っていいでしょう。

【メモ】
「&」が本当は何者なのかを知るには、まず「2進数」という数値の表現方法を知る必要があります。
その後に「ビット演算」等のキーワードで調べてみてください。

 

今回のポイント

  • 「stick 変数名」と書くと、その時押しているキーの番号が変数に入る。
  • キーの押しっぱなしを有効にしたい場合は、
    stick命令の2番目のパラメーターに
    任意のキーの番号(複数ある場合は合計)を書く
  • キーが押された時の処理を書くには
        if(変数名 & キーの番号){
            必要な処理
        }

    と書く。

 

Pocket


コメントを残す

メールアドレスが公開されることはありません。

 ■ツール・ゲーム  ■講座  ■素材  ■その他  ■管理人へ
  Prominece3D   エフェクト画像の描き方   戦闘エフェクト素材   CG作品   お問い合わせ
  ウディタミネンス   ロゴの描き方   投稿エフェクト   書籍   管理人を応援
  Relocater   HSP講座      
  Prominece        

Copyright © 2011-2015 藤宮翔流 All Rights Reserved.