小学生からのプログラミング入門講座、今回もはじめていきましょう!
前回は、キャラクターの画像をスムーズに動かす方法でしたが、スピードが速すぎたので、画像の移動間隔を短くする方法も含めて紹介しました。
このスピードが速すぎたというのは、キャラクターを必ず32pxずつ動くようにしたかったからです。
そこで今回は必ず32pxずつ、ゆっくりと動かす方法を紹介します。
うーん、前回の講座で教えてもらった方法、キャラの動きが速すぎるんだよね。かといって、移動間隔を狭めると、マップとずれちゃうみたいだしな
どうやってやればいいのかな
ふっふっふ、今回はキャラを決まった間隔ずつゆっくり動かす方法を教えるべ
キャラクターの画像を32pxずつ、ゆっくり動かしてみよう!
ではりこちゃんの画像を、32pxずつゆっくり動かしてみたいと思います。
まず、りこちゃんのオブジェクトに、move(動き)というプロパティを作ります。
xとyはこれまでの講座で作ったものです。
var rico = new Object();
rico.x = 0;
rico.y = 0;
rico.move = 0;
さらにpressed_key(押されたキー)という変数を作ります。
var pressed_key = '';
rico.moveには初期値として0を代入しているべ。これはりこちゃんを動かすときに使うためのものだべ
どうやって使うんだろう?
見ていけば分かるべ。pressed_keyは、押されたキーを一時的に代入しておく変数だべ。32px動き終わるまでは、押されていたキーをこの変数が覚えていてくれれば、キーがはなされてしまってもその方向に32px動かせるべ
そっか。32px動き終わる前にキーがはなされちゃったら、どっちに動いていいのか分からなくなっちゃうのね! それを覚えておくための変数だ
では、りこちゃんが32pxずつゆっくり動くようにしていきましょう。
キーボード入力の部分をつぎのように変更してください。
キーボード入力はrico.moveが覚えている数が「0」の時のみ、動くようにします。
さらにキーが押された時は、りこちゃんを32pxずつ動かしたいので、rico.moveに32を代入します。
pressed_keyには今押されたキーがなんなのかを、一時的に代入しておきます。
if ( rico.move === 0 ) {
if ( key.left === true ) {
rico.move = 32;
pressed_key = 'left';
}
if ( key.up === true ) {
rico.move = 32;
pressed_key = 'up';
}
if ( key.right === true ) {
rico.move = 32;
pressed_key = 'right';
}
if ( key.down === true ) {
rico.move = 32;
pressed_key = 'down';
}
}
りこちゃんの移動は、つぎのようにします。
さきほど、rico.moveには32を代入しましたね。rico.moveが0よりも大きい場合は、rico.moveが覚えている数(32)から4ずつ引いていきます。
32は4で割り切れる数なので、4ずつ引いていけば必ず0になります。(必ず割り切れる数にしてください)
さらに、pressed_keyが覚えているキーによって、その方向にりこちゃんを4pxずつ動かします。
rico.moveから引いた数とおなじ数だけ動かせば、最終的には32px動いたことになります。
if (rico.move > 0) {
rico.move -= 4;
if ( pressed_key === 'left' ) rico.x -= 4;
if ( pressed_key === 'up' ) rico.y -= 4;
if ( pressed_key === 'right' ) rico.x += 4;
if ( pressed_key === 'down' ) rico.y += 4;
}
実際には、一回ボタンが押される(または押され続けている)ごとに、4pxずつ、8回移動することになるんだべ。合計32px移動するべ
算数ね。4×8=32ね
script.js全体ではこのようになります。
script.js
//画面に画像を表示する
document.write( '<img id="rico" src="rico.png">' );
//りこちゃんのオブジェクトを作成
var rico = new Object();
rico.x = 0;
rico.y = 0;
rico.move = 0;
//押されたキーを入れておくための変数
var pressed_key = '';
//キーボードのオブジェクトを作成
var key = new Object();
key.up = false;
key.down = false;
key.right = false;
key.left = false;
//メインループ
function main() {
//キーボードが押された時、keydownfunc関数(かんすう)を呼び出す
addEventListener( "keydown", keydownfunc );
//キーボードがはなされた時、keyupfunc関数(かんすう)を呼び出す
addEventListener( "keyup", keyupfunc );
//rico.moveが0のとき、りこちゃんが移動する準備(じゅんび)をする
if ( rico.move === 0 ) {
if ( key.left === true ) {
rico.move = 32;
pressed_key = 'left';
}
if ( key.up === true ) {
rico.move = 32;
pressed_key = 'up';
}
if ( key.right === true ) {
rico.move = 32;
pressed_key = 'right';
}
if ( key.down === true ) {
rico.move = 32;
pressed_key = 'down';
}
}
//rico.moveが0より大きいとき、りこちゃんが移動(いどう)する
if (rico.move > 0) {
rico.move -= 4;
if ( pressed_key === 'left' ) rico.x -= 4;
if ( pressed_key === 'up' ) rico.y -= 4;
if ( pressed_key === 'right' ) rico.x += 4;
if ( pressed_key === 'down' ) rico.y += 4;
}
//りこちゃんの画像の位置(いち)を反映(はんえい)させる
document.getElementById( 'rico' ).style.top = rico.y + "px";
document.getElementById( 'rico' ).style.left = rico.x + "px";
//main関数(かんすう)、つまり自分自身の関数を呼び出すことでループさせる。
requestAnimationFrame(main);
}
requestAnimationFrame(main);
//キーボードが押されたときに呼び出される関数(かんすう)
function keydownfunc( event ) {
var key_code = event.keyCode;
if( key_code === 37 ) key.left = true; //「左ボタン」が押されたとき、key.leftをtrueにする
if( key_code === 38 ) key.up = true; //「上ボタン」が押されたとき、key.upをtrueにする
if( key_code === 39 ) key.right = true; //「右ボタン」が押されたとき、key.rightをtrueにする
if( key_code === 40 ) key.down = true; //「下ボタン」が押されたとき、key.downをtrueにする
}
//キーボードがはなされたときに呼び出される関数
function keyupfunc( event ) {
var key_code = event.keyCode;
if( key_code === 37 ) key.left = false; //「左ボタン」がはなされたとき、key.leftをfalseにする
if( key_code === 38 ) key.up = false; //「上ボタン」がはなされたとき、key.upをfalseにする
if( key_code === 39 ) key.right = false //「右ボタン」がはなされたとき、key.rightをfalseにする;
if( key_code === 40 ) key.down = false; //「下ボタン」がはなされたとき、key.downをfalseにする
}
このように動きます。
分かりやすいように、たてよこ32pxのマス目を作りました。はみ出さないかぎり、必ずマスの中でりこちゃんは止まります。
下の枠内を一度クリックしてから、方向キーでりこちゃんを動かしてみてね!
まとめ
今回はりこちゃんを32pxずつゆっくりと動かす方法を紹介しました。
すごい! マス目を綺麗に移動してる!
ここにマップを作っていけば、かなりゲームっぽくなるべな
道や障害物を作りたいね。あと、お店を作って、お花畑を作って、遊園地を作って、錦戸くんと……きゃー
じゃあわだずは、むいちもつ(かつお)を置いて、またたびも作って、グッバイキティちゃんと……ふっふっふ
なんだよ! 二人して……ちぇ
まぁまぁ、キャラクターの移動に関しては、だいぶ理解できたんじゃないかと思うべ。ちょっとずつ難しくなっていくべから、これからも頑張ってついてくるのだべよ
うん!
うん!
このシリーズの一覧はこちら
- 小学生からのプログラミング入門。プログラミングってなぁに?
- Scratchの使い方と、ゲーム作りの基礎知識を学ぼう! 小学生からのプログラミング入門
- Scratchでじゃんけんゲームを作ろう! 小学生からのプログラミング入門
- Scratchでシューティングゲームを作ろう! 小学生からのプログラミング入門
- Scratchでピアノ鍵盤を作って音を鳴らそう! 小学生からのプログラミング入門
- テキストエディタ(Visual Studio Code)をインストールしてみよう! 小学生からのプログラミング入門
- Visual Studio Codeを日本語化してみよう! 小学生からのプログラミング入門
- JavaScriptでおみくじを作ろう! 小学生からのプログラミング入門
- JavaScriptで今月の残り日数を計算してみよう! 小学生からのプログラミング入門
- JavaScriptで画像を表示してみよう! 小学生からのプログラミング入門
- JavaScriptで画像を移動してみよう! 小学生からのプログラミング入門
- 【JavaScript】キー入力でキャラを動かしてみよう! 小学生からのプログラミング入門
- 【JavaScript】ファイルを分けて管理してみよう! 小学生からのプログラミング入門
- 【JavaScript】オブジェクトを使ってみよう! 小学生からのプログラミング入門
- 【JavaScript】ゲームのメインループを作ってみよう! 小学生からのプログラミング入門
- 【JavaScript】キャラを決まった間隔ずつ動かす! 小学生からのプログラミング入門
- HTML5とCanvasを使ってみよう! 小学生からのプログラミング入門
- 【JavaScript】迷路やRPGで使えるマップを作ってみよう! 小学生からのプログラミング入門
- 【JavaScript】マップでキャラを動かせるようにしよう! 小学生からのプログラミング入門
- 【JavaScript】クラスの概念をしっかりと理解しよう! 小学生からのプログラミング入門
- 【JavaScript】プログラム全体をクラスを使って作ってみよう! 小学生からのプログラミング入門
- 【JavaScript】文字を表示するクラスを作ってみよう! 小学生からのプログラミング入門
- 【JavaScript】改行と一文字ずつ画面に表示する方法! 小学生からのプログラミング入門
- 【JavaScript】ノベルゲーム風にキー入力で文字を切り替える方法! 小学生からのプログラミング入門
- JavaScriptでRPGを作ろう!スマホにも対応したゲームの作り方
- webpackを使ってゲームエンジンを作ろう!(JSライブラリの作り方)
- WindowsにPythonをインストールしてみよう!小学生からのPython入門
- MacにPythonをインストールしてみよう!小学生からのPython入門
- Pythonでじゃんけんゲームを作ってみよう!小学生からのPython入門
- Pythonのtkinterを使って、ウィンドウを表示してみよう!
- Pythonのtkinterで、画像つきのおみくじゲームを作ろう!