1. HOME
  2. »
  3. プログラミング・Web
  4. »
  5. JavaScript
  6. »
  7. 小学生からのJavaScript入門。キー入力でキャラを動かしてみよう!

小学生からのJavaScript入門。キー入力でキャラを動かしてみよう!

小学生からのJavaScript入門講座(にゅうもんこうざ)、第4弾です。

前回はHTMLでりこちゃんの画像を表示し、クリックすると前に一歩動くというのをJavaScriptで作りました。
JavaScriptでの画像移動(がぞういどう)の方法が分かったと思います。

今回はキーボードからの入力でキャラクターを移動させる方法を紹介(しょうかい)します。
これを作ることができれば、もっとゲームっぽくなります。がんばっていきましょう!

アル

アル

やっぱりゲームはキーボードでキャラを動かしたいな


りこ

りこ

そうよね。ねぇ山田先生! どうやるの?


山田

山田

キー入力だべな。じゃあ今日はキーボードからの入力について教えてあげるべだべよ


アル

アル

わーい


りこ

りこ

わーい

目次
  1. キーボードからの入力に反応させてみよう!
  2. キーボードでキャラクターを操作できるようにしよう!
  3. まとめ

キーボードからの入力に反応させてみよう!

山田

山田

まずはキーボードからの入力に反応させてみるべ

さて、まずはキーボードからの入力に反応させてみましょう。
キーボードからの入力を知るにはaddEventListener()を使うと便利です。

addEventListener()は、マウスのクリックや、キーボードの入力などを調べることができるものです。

では実際(じっさい)に使ってみましょう。
例えばindex.htmlをこのようにすると、何かのキーが押されるたびに「押したなー」というアラートが表示されます。

index.html

<html>
<head>
    <title>キー入力</title>
</head>
<body>
    <script>
        addEventListener("keydown", keydownfunc);

        function keydownfunc( event ) {
            alert('押したなー');
        }
    </script>
</body>
</html>

7行目のaddEventListener("keydown", keydownfunc);から見ていきましょう。
addEventListener()は、何かの操作(そうさ)を判断(はんだん)するものです。マウスのクリックだったり、キーボードの入力だったりします。
今回はキーボードの入力を調(しら)べたいので、()の中の1つ目に、keydown(キーダウン、キーボードが押された時ということ)を書きます。
さらに、()の中の2つ目には「keydownfunc」と書かれています。これで9行目の関数(かんすう)を呼び出しています。

9行目〜11行目の{}の中には、キーボードが押された時にして欲しいことを書いていきます。今回のして欲しいことは、10行目のアラート表示です。

このように表示されます。
キー入力

アル

アル

関数(かんすう)ってなぁに?


山田

山田

関数は、何度も使う機能(きのう)をあらかじめ作っておいて、どこからでも呼び出せるようにするものだべ。それはまたこの後の記事で説明していくから今は気にしないで、7行目は「キーボードが押された時にkeydownfunc関数を呼んで」とお願いしていて、9行目のkeydownfunc関数を読んでいると思っておけばいいだべよさ


りこ

りこ

keydownfunc( event )のeventってのは?


山田

山田

それは今から説明(せつめい)していくべ

9行目のeventとは何なのでしょうか?
では今から説明していきます。

では、上のプログラムの、JavaScriptの部分を、以下のように変更してみてください。

addEventListener("keydown", keydownfunc, false);

function keydownfunc( event ) {
    alert( event.keyCode );
}

これでキーボードを押すと、アラートに様々(さまざま)な数字が表示されます。
この数字は、押されるキーによって変わります。
そうです。このevent.keyCodeをアラートで表示させることによって、何のキーを押したのかが分かるのです。

つまり、eventから様々(さまざま)な情報(じょうほう)を手に入れることができます。

ちなみに「event」は任意(にんい)の名前でもだいじょうぶです。

キーボードでキャラクターを操作できるようにしよう!

次は、キーボードでりこちゃんの画像を操作(そうさ)できるようにしていきます。

アル

アル

キーボードでキャラを操作できるの?


山田

山田

できるべよ。今から作っていくべからな


りこ

りこ

わーい。私のイラストが動くのね!


アル

アル

僕のキャラは動かないの?


山田

山田

てやんでぇ、べらぼうめ! 描くのけっこう大変だべよ!


アル

アル

がーん

では、先ほどの画面で方向キーを押してみてください。
方向キーのそれぞれのボタンが、どの数なのかを見てみましょう。
すると、それぞれのボタンに以下の数が割り当てられていることが分かります。

左 : 37
上 : 38
右 : 39
下 : 40

では、前回作ったプログラムに戻ります。
前回のプログラムはりこちゃんをクリックすると、りこちゃんが一歩前に歩くというものでした。

では、これをキーボードで動かせるように直していきたいと思います。

var y = 0;
var x = 0;
addEventListener("keydown", keydownfunc, false);

function keydownfunc( event ) {
	var key_code = event.keyCode;
	if( key_code === 37 ) x -= 32;
	if( key_code === 38 ) y -= 32;
	if( key_code === 39 ) x += 32;
	if( key_code === 40 ) y += 32;
	document.getElementById( 'rico' ).style.top = y + "px";
	document.getElementById( 'rico' ).style.left = x + "px";
}

1行目〜2行目で、変数yと変数xの初期値(しょきち)を設定(せってい)しています。りこちゃんの初期位置(しょきいち)はCSSで設定(せってい)しているので、関係(かんけい)ありませんが、キーボードが押された時点(じてん)で変数yと変数xが覚えている数が反映(はんえい)され、りこちゃんの場所が移動します。
3行目で、キーボードが入力された時に、5行目のkeydownfunc関数(かんすう)を呼(よ)び出しています。
6行目は、event.keyCode、つまり押されたボタンに割り当てられた数値(すうち)を、key_code変数に代入(だいにゅう)しています。
7行目で、キーボードの37ボタン、つまり「左ボタン」が押された場合に、x座標(ざひょう)から32をひき算しています。
8行目で、キーボードの38ボタン、つまり「上ボタン」が押された場合に、y座標から32をひき算しています。
9行目で、キーボードの39ボタン、つまり「右ボタン」が押された場合に、x座標に32をたし算しています。
10行目で、キーボードの40ボタン、つまり「下ボタン」が押された場合に、y座標に32をたし算しています。
11行目で、上下ボタンが押された時に、りこちゃんを上下に動かします。
12行目で、左右ボタンが押された時に、りこちゃんを左右に動かします。

index.html全体ではこのようになります。

<html>
<head>
    <title>キー入力</title>
    <style>
        #rico {
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>
</head>
<body>
    <img id="rico" src="rico.png">
    <script>
        var y = 0;
        var x = 0;
        addEventListener("keydown", keydownfunc, false);

        function keydownfunc( event ) {
            var key_code = event.keyCode;
            if( key_code === 37 ) x -= 32;
            if( key_code === 38 ) y -= 32;
            if( key_code === 39 ) x += 32;
            if( key_code === 40 ) y += 32;
            document.getElementById( 'rico' ).style.top = y + "px";
            document.getElementById( 'rico' ).style.left = x + "px";
        }
    </script>
</body>
</html>

下の枠内(わくない)を一度クリックしてから、方向キーでりこちゃんを動かしてみてね!

りこ

りこ

きゃー、わたしがキーボードの入力で動いてる!


山田

山田

かなりゲームっぽくなってきたべな


りこ

りこ

うん、すごい!

まとめ

今回はJavaScriptでキャラクターを操作(そうさ)できるようにする方法を紹介しました。

アル

アル

この動き、昔のポケモンっぽいよ!


山田

山田

結構(けっこう)古いバージョンだと思うべけど、よく知ってるべな


アル

アル

ゲーム、大好きだからね!


りこ

りこ

はやくみんなにやってもらえるようなゲームが作りたいなー


山田

山田

頑張ってやればすぐに作れるべよ。わだずもディズニーランドにいくことを夢見て毎日頑張ってるべ


りこ

りこ

なにを?


山田

山田

人間になりすます練習だべ


りこ

りこ

……。


アル

アル

むり……じゃなくて、がんばって!

この企画の一覧はこちら

  1. 小学生からのプログラミング入門。JavaScriptでおみくじを作ろう!
  2. 小学生からのJavaScript入門。今月の残り日数を計算してみよう!
  3. 小学生からのJavaScript入門。画像の表示と移動をしてみよう!
  4. 小学生からのJavaScript入門。キー入力でキャラを動かしてみよう!
  5. 小学生からのJavaScript入門。ファイルを分けて管理してみよう!
  6. 小学生からのJavaScript入門。オブジェクトを使ってみよう!
  7. 小学生からのJavaScript入門。ゲームのメインループを作ってみよう!
  8. 小学生からのJavaScript入門。キャラを決まった間隔ずつ動かす!
  9. 小学生からのJavaScript。HTML5とCanvasを使ってみよう!
  10. 小学生からのJavaScript。迷路やRPGで使えるマップを作ってみよう!
  11. 小学生からのJavaScript。マップでキャラを動かせるようにしよう!
  12. 小学生からのJavaScript。クラスの概念をしっかりと理解しよう!
  13. 小学生からのJavaScript。プログラム全体をクラスを使って作ってみよう!
  14. 小学生からのJavaScript。文字を表示するクラスを作ってみよう!
  15. 小学生からのJavaScript。改行と一文字ずつ画面に表示する方法!
  16. JavaScript|ノベルゲーム風にキー入力で文字を切り替える方法!

スポンサードリンク

関連コンテンツ

オススメ記事

VCCW

VCCW で、超簡単に WordPress のローカル開発環境を整える方法。

考えすぎて間違った方向へ進む、@It_is_Rです。 WordPress のローカル開発環境を作りたい時、 VCCW を使うと便利です。 今回は、 その方法を紹介します。 VCC

キャラを決まった間隔ずつ動かすよ!

小学生からのJavaScript入門。キャラを決まった間隔ずつ動かす!

小学生からのプログラミング入門講座(にゅうもんこうざ)、第8弾です。 前回は、キャラクターの画像(がぞう)をスムーズに動かす方法でしたが、スピードが速すぎたので、画像の移動間隔(かんかく)を短く

KSSでスタイルガイドを作る方法。インストールと使い方。

そのうちWordPressのテーマを作る方法の解説とかしたいなーと思っている@It_is_Rです。 いま準備中ですので、もうちょっとお待ちくださいねー。 そして今回ですが、KSSを使ったスタイ

Bootstrap 4によるボタンの作り方。色やサイズなどの指定方法!

Bootstrap4の使い方、第5回目となりました。 Bootstrapの機能のひとつとして、クラスを組み合わせて指定するだけで、色々なボタンが作れます。 今回はBootstrap4を使ったボ

FC2 blog customize

FC2ブログ ”最強” カスタマイズ入門講座。文字の大きさを設定する。

こんにちわ。美しいものほど濁って見える@It_is_Rです。 今回もFC2ブログの"最強"カスタマイズを始めていこうと思います。 今回は文字の大きさや色など、ブログ内の文字の設定をしていきます

【Bootstrap 4】記事一覧ページなどで使える「カード」の使い方

Bootstrap4の使い方、第7回目です。 トップページなどを見ると、記事の一部が抜粋された記事一覧が表示されているサイトをよく見かけます。 今回はそんな記事一覧ページを作るのに便利な「カー

【CSS設計】ボタンを作って覚える。機能ごとに分けて作る重要性。

手が回らない、頭が回らない、口が回らない。@It_is_Rです。 CSSはある程度大雑把に書いても動かすことができます。しかし、CSSを覚える上で一番難しい部分と言えばCSS設計でしょう。 パ

これまでのプログラム全体をクラスを使って作るべ!

小学生からのJavaScript。プログラム全体をクラスを使って作ってみよう!

小学生からのプログラミング講座(こうざ)、第13弾です。 前回はプログラミングにおける、クラスの使い方を学びました。しかし、まだクラスをどうやって使えばいいのか、ピンときていないかも

Scratchで じゃんけんゲームを作ろう!

小学生から始めるScratch入門。じゃんけんゲームを作ろう!

小学生から始めるScratch入門です。 前回、スクラッチでシューティングゲームを作りました。 今回はじゃんけんゲームを作ってみましょう。 プロローグ [serif icon=

【Android Studio】 GridLayout の使い方。複雑なレイアウトを表現する方法

スマホの充電がいつの間にか無くなっている@It_is_Rです。 Androidアプリ開発、10回目となりました。 前回、様々なレイアウトの使い方を紹介しましたが、今回はその中でもちょっと難しい

3件のコメント “小学生からのJavaScript入門。キー入力でキャラを動かしてみよう!

  1. なぜ「==」ではなく「===」を用いてコードを書いたのですか?
    個人的には「===」がいまいち理解できないので「==」を用いてfalseをtrueに変えて書き、画像を動かすことができました。しかし、これだとどこかで不具合が出るのでしょうか?

    1. >ああああさん
      はじめまして、コメントありがとうございます。
      返信が遅くなり、申し訳ありません。

      まず「==」は「同じ」という意味ですが、この場合、変数の型が違っても同じものとして扱われます。
      例えば、変数numに100を代入し、条件分岐を行なったとします。

      let num = 100;
      
      if ( num == 100 ) console.log( '数値' );
      if ( num == '100' ) console.log( '文字' );
      

      実行結果は
      ——
      数値
      文字
      ——
      というふうになり、numには数値を代入しているにも関わらず、文字列でもtrueの判断がされてしまっています。

      ifの「==」を「===」に変更すると、「数値」とのみ表示されます。
      「==」と「===」の違いはこれだけではありませんが、つまり「==」よりも「===」の方が、厳密に判定してくれるということです。

      今回の場合、キー入力の判断をしているだけなので、「==」と「===」の違いによっての不具合は生じないのではないかと思います。
      しかし今後プログラムを作るうえで、数値を扱いたいのに文字列でもtrueとなってはまずい状況に遭遇するかもしれません。

      故意に「==」を使う場合もあると思いますが、なるべく「===」を使い、変数の型を意識したプログラムを作るほうがバグを防げるのではないかと思います。

  2. なぜ「==」ではなく「===」を用いてJSを書いたのでしょうか?
    もしも、すでにこの記事のどこかに記述してある場合はすいません。

コメントをどうぞ!

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