マウスの位置を追いかけるやつ
今日は勢いに乗ってもう1本やってみる。
これもスピードと角度のサンプルです。
マウスを追いかけてくるアプリです。
結果はこちら。どう面白い?
そんでコード。
package { import flash.display.Sprite; import flash.events.Event; public class FollowMouse extends Sprite { private var arrow:Arrow; private var speed:Number = 3; public function FollowMouse() { init(); } private function init():void{ arrow = new Arrow(); addChild(arrow); addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(evt:Event):void { // 横の距離、縦の距離 var dx:Number = mouseX - arrow.x; var dy:Number = mouseY - arrow.y; // 縦、横の距離から角度(ラジアン)を算出 var radians:Number = Math.atan2(dy, dx); // 角度に変換 arrow.rotation = radians * 180 / Math.PI; // 角度がわかれば縦、横のスピードがわかる var vx:Number = Math.cos(radians) * speed; var vy:Number = Math.sin(radians) * speed; arrow.x += vx; arrow.y += vy; } } } import flash.display.Sprite; class Arrow extends Sprite { public function Arrow() { init(); } public function init():void{ graphics.lineStyle(1, 0, 1) graphics.beginFill(0xFF0000); graphics.moveTo(-50, -25); graphics.lineTo(0, -25); graphics.lineTo(0, -50); graphics.lineTo(50, 0); graphics.lineTo(0, 50); graphics.lineTo(0, 25); graphics.lineTo(-50, 25); graphics.lineTo(-50, -25); graphics.endFill(); } }
肝なのは、
private function onEnterFrame(evt:Event):void { // 横の距離、縦の距離 var dx:Number = mouseX - arrow.x; var dy:Number = mouseY - arrow.y; // 縦、横の距離から角度(ラジアン)を算出 var radians:Number = Math.atan2(dy, dx); // 角度に変換 arrow.rotation = radians * 180 / Math.PI; // 角度がわかれば縦、横のスピードがわかる var vx:Number = Math.cos(radians) * speed; var vy:Number = Math.sin(radians) * speed; arrow.x += vx; arrow.y += vy; }
コメントに書いてあるとおり、
縦の長さ、横の長さがわかればMath.atan2で角度を求めることができる。
角度がわかれば、Math.cosで横の成分、Math.sinで縦の成分がわかる、と。
以上。