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

【JavaScript】キー入力でキャラを動かしてみよう! 小学生からのプログラミング入門

小学生からのJavaScriptジャバスクリプト入門講座にゅうもんこうざ、今回もはじめていきましょう!

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

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

アル

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

りこ

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

山田

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

アル

わーい

りこ

わーい

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

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

山田

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

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

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

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

index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>キー入力</title>
  6. </head>
  7. <body>
  8. <script>
  9.  
  10. //なにかキーが押されたとき、keydownfuncという関数を呼び出す
  11. addEventListener( "keydown", keydownfunc );
  12.  
  13. //キーが押されたときに呼び出される関数
  14. function keydownfunc( event ) {
  15.  
  16. //アラートを表示する
  17. alert( '押したなー' );
  18.  
  19. }
  20.  
  21. </script>
  22. </body>
  23. </html>

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

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

キー入力

このように表示されます。

アル

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

山田

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

りこ

keydownfunc( event )のeventってのは?

山田

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

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

では、上のプログラム17行目の、alert()を、以下のように変更してみてください。

  1. alert( event.keyCode );

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

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

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

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

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

アル

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

山田

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

りこ

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

アル

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

山田

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

アル

がーん

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

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

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

では、これをキーボードで動かせるように直していきたいと思います。
前回の記事で作成した、JavaScriptの部分を、以下のように変更します。

  1. //画面に画像を表示する
  2. document.write( '<img id="rico" src="rico.png">' );
  3.  
  4. //キャラクターの位置
  5. var y = 0;
  6. var x = 0;
  7.  
  8. //なにかキーが押されたとき、keydownfuncという関数を呼び出す
  9. addEventListener( "keydown", keydownfunc );
  10.  
  11. //キーが押されたときに呼び出される関数
  12. function keydownfunc( event ) {
  13.  
  14. //押されたボタンに割り当てられた数値(すうち)を、key_codeに代入
  15. var key_code = event.keyCode;
  16.  
  17. if( key_code === 37 ) x -= 32; //「左ボタン」が押されたとき、xの値から32を引き算する
  18. if( key_code === 38 ) y -= 32; //「上ボタン」が押されたとき、yの値から32を引き算する
  19. if( key_code === 39 ) x += 32; //「右ボタン」が押されたとき、xの値に32を足し算する
  20. if( key_code === 40 ) y += 32; //「下ボタン」が押されたとき、yの値に32を足し算する
  21.  
  22. //りこちゃんの画像の位置(いち)を反映(はんえい)させる
  23. document.getElementById( 'rico' ).style.top = y + "px";
  24. document.getElementById( 'rico' ).style.left = x + "px";
  25.  
  26. }

2行目: りこちゃんの画像を表示しています。
5行目〜6行目: 変数yと変数xの初期値しょきち設定せっていしています。
9行目: キーボードが入力されたときに、12〜26行目のkeydownfunc関数かんすうび出しています。
15行目: event.keyCode、つまり押されたボタンに割り当てられた数値すうちを、key_code変数に代入だいにゅうしています。
17行目: キーボードの37ボタン、つまり「左ボタン」が押された場合に、x座標ざひょうから32をひき算しています。
18行目: キーボードの38ボタン、つまり「上ボタン」が押された場合に、y座標から32をひき算しています。
19行目: キーボードの39ボタン、つまり「右ボタン」が押された場合に、x座標に32をたし算しています。
20行目: キーボードの40ボタン、つまり「下ボタン」が押された場合に、y座標に32をたし算しています。
23行目: 上下ボタンが押された時に、りこちゃんを上下に動かします。
24行目: 左右ボタンが押された時に、りこちゃんを左右に動かします。

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

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>キー入力</title>
  6. <style>
  7. #rico {
  8. position: absolute;
  9. top: 0;
  10. left: 0;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <script>
  16.  
  17. //画面に画像を表示する
  18. document.write( '<img id="rico" src="rico.png">' );
  19.  
  20. //キャラクターの位置
  21. var y = 0;
  22. var x = 0;
  23.  
  24. //なにかキーが押されたとき、keydownfuncという関数を呼び出す
  25. addEventListener( "keydown", keydownfunc );
  26.  
  27. //キーが押されたときに呼び出される関数
  28. function keydownfunc( event ) {
  29.  
  30. //押されたボタンに割り当てられた数値(すうち)を、key_codeに代入
  31. var key_code = event.keyCode;
  32.  
  33. if( key_code === 37 ) x -= 32; //「左ボタン」が押されたとき、xの値から32を引き算する
  34. if( key_code === 38 ) y -= 32; //「上ボタン」が押されたとき、yの値から32を引き算する
  35. if( key_code === 39 ) x += 32; //「右ボタン」が押されたとき、xの値に32を足し算する
  36. if( key_code === 40 ) y += 32; //「下ボタン」が押されたとき、yの値に32を足し算する
  37.  
  38. //りこちゃんの画像の位置(いち)を反映(はんえい)させる
  39. document.getElementById( 'rico' ).style.top = y + "px";
  40. document.getElementById( 'rico' ).style.left = x + "px";
  41.  
  42. }
  43.  
  44. </script>
  45. </body>
  46. </html>

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

りこ

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

山田

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

アル

うん、すごい!

まとめ

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

アル

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

山田

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

アル

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

りこ

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

山田

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

りこ

なにを?

山田

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

りこ

……

アル

えっ?

このシリーズの一覧はこちら

小学生からのJavaScript入門

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

小学生からのプログラミング入門

  1. 小学生からのプログラミング入門。プログラミングってなぁに?
  2. Scratchの使い方と、ゲーム作りの基礎知識を学ぼう! 小学生からのプログラミング入門
  3. Scratchでじゃんけんゲームを作ろう! 小学生からのプログラミング入門
  4. Scratchでシューティングゲームを作ろう! 小学生からのプログラミング入門
  5. Scratchでピアノ鍵盤を作って音を鳴らそう! 小学生からのプログラミング入門
  6. テキストエディタ(Visual Studio Code)をインストールしてみよう! 小学生からのプログラミング入門
  7. Visual Studio Codeを日本語化してみよう! 小学生からのプログラミング入門
  8. JavaScriptでおみくじを作ろう! 小学生からのプログラミング入門
  9. JavaScriptで今月の残り日数を計算してみよう! 小学生からのプログラミング入門
  10. JavaScriptで画像を表示してみよう! 小学生からのプログラミング入門
  11. JavaScriptで画像を移動してみよう! 小学生からのプログラミング入門
  12. 【JavaScript】キー入力でキャラを動かしてみよう! 小学生からのプログラミング入門
  13. 【JavaScript】ファイルを分けて管理してみよう! 小学生からのプログラミング入門
  14. 【JavaScript】オブジェクトを使ってみよう! 小学生からのプログラミング入門
  15. 【JavaScript】ゲームのメインループを作ってみよう! 小学生からのプログラミング入門
  16. 【JavaScript】キャラを決まった間隔ずつ動かす! 小学生からのプログラミング入門
  17. HTML5とCanvasを使ってみよう! 小学生からのプログラミング入門
  18. 【JavaScript】迷路やRPGで使えるマップを作ってみよう! 小学生からのプログラミング入門
  19. 【JavaScript】マップでキャラを動かせるようにしよう! 小学生からのプログラミング入門
  20. 【JavaScript】クラスの概念をしっかりと理解しよう! 小学生からのプログラミング入門
  21. 【JavaScript】プログラム全体をクラスを使って作ってみよう! 小学生からのプログラミング入門
  22. 【JavaScript】文字を表示するクラスを作ってみよう! 小学生からのプログラミング入門
  23. 【JavaScript】改行と一文字ずつ画面に表示する方法! 小学生からのプログラミング入門
  24. 【JavaScript】ノベルゲーム風にキー入力で文字を切り替える方法! 小学生からのプログラミング入門
  25. JavaScriptでRPGを作ろう!スマホにも対応したゲームの作り方
  26. webpackを使ってゲームエンジンを作ろう!(JSライブラリの作り方)
  27. WindowsにPythonをインストールしてみよう!小学生からのPython入門
  28. MacにPythonをインストールしてみよう!小学生からのPython入門
  29. Pythonでじゃんけんゲームを作ってみよう!小学生からのPython入門

スポンサードリンク

関連コンテンツ

オススメ記事

zsh

enhancd で cd コマンドを超便利に! インストールと使い方。

曲を作っても、再生数が伸びない。@It_is_Rです。 やかましいわ。 ターミナルをカッコよくするシリーズ4回目です。 今回は enhancd というプラグインを使って cd コマンドを便利にする方

npm-scriptsの使い方。自作のコマンドによるタスク実行方法

畳んだ布団が飼い猫のお気に入りの場所になってます。@It_is_Rです。 npm-scriptsを使うことで、あらかじめタスクをかんたんな名前で指定しておき、そのタスクを素早く実行できるように

【Unity】開発したiOSゲームをiPhoneで実機テストする方法

こんにちは。現在、最新ゲーム熱意製作中の@It_is_Rです。個人での開発はとても大変で、時間がかかってしまっていますが、すこしずつ形にしていっています。 さて、今回はUnityで開発したiO

FC2 blog customize

FC2ブログ ”最強” カスタマイズ入門講座。背景を変更する。

三度の飯よりも好きなものが多すぎて比較にならない@It_is_Rです。 FC2ブログ"最強"カスタマイズ入門講座の続きですね。最強にカスタマイズしていきましょう。 今回は背景色の変更をメインに

【Android Studio】レイアウト( Layout )の種類を覚えよう!

服に膝を入れるのが癖です。@It_is_Rです。 Androidアプリ開発、9回目となりました。 さて今回は、ボタンやテキストのレイアウトを整える方法を、解説していきたいと思います。 水平(Ho

オブジェクトを使ってみよう!

【JavaScript】オブジェクトを使ってみよう! 小学生からのプログラミング入門

小学生からのJavaScript《ジャバスクリプト》入門講座《にゅうもんこうざ》、今回もはじめていきましょう!前回の講座《こうざ》では、HTMLやCSS、JavaScriptを分けて管理《かんり》す

MacにPythonをインストールしてみよう!小学生からのPython入門

さて、今回《こんかい》もプログラミングを学んでいきましょう! 前回はWindows《ウィンドウズ》にPython《パイソン》をインストールする方法《ほうほう》を紹介《しょうかい》しました。今回

ショートコード

BEMによるCSS設計の方法を解説。命名規則から使い方まで。

完璧を求めすぎて、平均以下な@It_is_Rです。 CSSは比較的簡単なものですが、CSS設計をしっかりしておかなければ、余分なコードが多くなったり、後から修正が大変になったりしてこまることにな

webpackを使ってゲームエンジンを作ろう!(JSライブラリの作り方)

みなさんこんにちは。今回もたのしくプログラミングを学んでいきましょう! 前回の「JavaScriptでRPGを作ろう!スマホにも対応したゲームの作り方」では、JavaScriptでゲームエンジ

FC2 blog customize

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

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

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

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

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

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

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

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

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

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

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

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

コメントを残す(コメントは承認後に反映されます)

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です