ゲームといえば弾撃ちかな!ってことで、
UnityとかCCActionとかいろんな便利なAPIに頼り切りな昨今、あらためて低レイヤーで汎用的な弾幕の打ち方を学んでいきます。
最後にvxとvyを各々エンジンのupdate関数に組み込めば動きます。
##距離系
2点間の距離の差をもとにした弾撃ちです。
2点間の距離は、平方根を利用して出します。
具体的には「(AX - BX)の2乗 + (AY - BY)の2乗」の平方根が距離
もっと知るなら「2点間の距離の公式」
三平方の定理はどうしても避けられなさそうです
http://www.geisya.or.jp/~mwm48961/math/distance1j.htm
//targetX,Yがターゲットの座標、bulletX,Yが弾の座標
var targetX = 680;
var targetY = 1200;
var bulletX = 10;
var bulletY = 10;
//弾とターゲットの距離(平方根で求める)
var distance = Math.sqrt((targetX-bulletX)*(targetX-bulletX)+(targetY-bulletY)*(targetY-bulletY));
//弾速
var speed = 30;
//加速度(X,Yそれぞれ)
var vx = (targetX-bulletX) / distance * speed;
var vy = (targetY-bulletY) / distance * speed;
//アップデート内で座標を更新すると動く
function update(){
x += vx;
y += vy;
}
##角度系
角度をもとにした弾撃ち。
三角関数が深くわからなくても使えます。(自分も怪しい・・)
あと角度は大体ラジアンに変換するので慣れましょう。
//初期座標(bulletX,bulletY)からangleの角度へ移動
var bulletX = 0;
var bulletY = 0;
//弾速
var speed = 30;
//30度の方向に撃つ
var angle = 30;
//加速度(途中で角度→ラジアンに変換)
var vx = Math.cos(Math.PI / 180 * angle) * speed;
var vy = Math.sin(Math.PI / 180 * angle) * speed;
//アップデート内で座標を更新すると動く
function update(){
x += vx;
y += vy;
}
##もっと深く学べる書籍
今回のコードは下の書籍から着想を得ました。C++系のコードですがおすすめです。
シューティングゲームアルゴリズムマニアックス
http://www.amazon.co.jp/%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B2%E3%83%BC%E3%83%A0%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%83%9E%E3%83%8B%E3%82%A2%E3%83%83%E3%82%AF%E3%82%B9-C-magazine-%E6%9D%BE%E6%B5%A6-%E5%81%A5%E4%B8%80%E9%83%8E/dp/4797327316