シューティングゲームなどでの敵の動きは、ただまっすぐに直進するだけでは単調だ。
sinやcosなどを使うとゆらゆらした動きが再現できる。
JavaScriptのゲームエンジンenchant.jsを使っている。
ソースコード
HTML部分
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>enchant.js基本03</title> <script type="text/javascript" src="enchant.js"></script> <script type="text/javascript" src="game.js"></script> <style type="text/css"> body{ margin: 0;} </style> </head> <body> </body> </html>
JavaScript部分
// ------------------------------------------------------------------------- // enchant.js基本03: キーボードで動かしてみる // created at 2013-06-11 on MRGARITA.NET // ------------------------------------------------------------------------- enchant(); window.onload = function(){ var game = new Game(320, 320); game.rootScene.backgroundColor = "#ffcc00"; game.fps = 30; game.preload("player.png"); game.preload("teki.png"); game.onload = function(){ // プレイヤー var player = new Sprite(64, 64); player.image = game.assets["player.png"]; player.x = player.y = 120; player.addEventListener("enterframe", function(){ // キーボードによる移動 var input = game.input; if(input.left) player.x -= 4; if(input.right) player.x += 4; if(input.up) player.y -= 4; if(input.down) player.y += 4; // 当たり判定 if(player.within(teki)) game.rootScene.removeChild(player); }); // 敵 var teki = new Sprite(64, 64); teki.image = game.assets["teki.png"]; teki.x = 320; teki.y = Math.random() * 320; teki.speed = 1; teki.addEventListener("enterframe", function(){ teki.x -= teki.speed; teki.y = teki.y + 4 * Math.sin(game.frame / 10); // ゆらゆらした動き if(teki.x < 0){ teki.x = 340; teki.y = Math.random() * 320; teki.speed ++; if(teki.speed > 25) teki.speed = 1; } }); game.rootScene.addChild(player); game.rootScene.addChild(teki); } game.start(); }
今回は、敵が画面の右から左にゆらゆらと移動するため敵のy座標の計算にsinを使っている。
teki.y = teki.y + 4 * Math.sin(game.frame / 10);
game.frameはenchant.jsでは、フレームカウント数である。
game.fps = 30;
の設定により、一秒間に30ずつgame.frameの値が増えていく。
これを利用してsinの引数にしている。game.frameを使わなくても自分でフレーム毎にカウントする変数を作るなどしてsinの引数に使えば同じように動作する。10で割ったり4を掛けたりしているのは、適当にそれらしい動きになっただけで、値を変えてみれば、大きな弧を描いたりもすると思う。わたしも数学は得意ではないので、あまり気にせずやってみることが大切なのではないかと思う。
数学が得意だから面白いゲームが作れるわけでもないし。
コメント