In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: しょぼいホーミングレーザー - HOMING LASER

マウスの後を追いかけます。ちょっと挙動が怪しい…。
Get Adobe Flash player
by pima 24 Aug 2009
    Embed
// forked from rsakane's しょぼいホーミングレーザー - HOMING LASER
package
{
/*
 * マウスの後を追いかけます。ちょっと挙動が怪しい…。
 */
	import flash.display.Sprite
	import flash.events.Event;
	
	public class Main extends Sprite
	{
		private var bullets:Vector.<HomingLaser> = new Vector.<HomingLaser>();
		
		public function Main()
		{
			for (var i:int = 0; i < 5; i++)
			{
				var laser:HomingLaser = new HomingLaser();
				bullets.push(laser);
				addChild(laser);
			}
			
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		private function onEnterFrame(event:Event):void
		{
			for (var i:int = 0; i < bullets.length; i++)
			{
				bullets[i].move();
			}
		}
	}
}

import flash.display.Sprite;

class Bullet extends Sprite
{
	public function Bullet()
	{
		graphics.beginFill(0xFF57A8);
		graphics.drawCircle(0, 0, 20);
		graphics.endFill();
	}
}

class HomingLaser extends Sprite
{
	private var speed:Number = Math.random() * 5 + 2;
	private var laser:Vector.<Bullet> = new Vector.<Bullet>();
	private var deg:Number = 0;
	
	public function HomingLaser()
	{
		var xx:int = Math.random() * 465;
		var yy:int = Math.random() * 465;
		var length:int = Math.random() * 20 + 20;

		for (var i:int = 0; i < length; i++)
		{
			var bullet:Sprite = new Bullet();
			bullet.x = xx;
			bullet.y = yy;
			bullet.alpha = 1.0 / length * (length - i);
			addChild(bullet);
			laser.push(bullet);
		}
	}
	
	public function move():void
	{
		for (var i:int = laser.length - 1; i >= 1; i--)
		{
			laser[i].x = laser[i - 1].x;
			laser[i].y = laser[i - 1].y;
		}

		var degree:Number = Math.atan2(mouseY - laser[0].y, mouseX - laser[0].x) / (Math.PI / 180);
		if (degree < 0) degree += 360;
		
		if (deg - degree >= 180 || (deg - degree < 0 && deg - degree > -180))
		{
			deg = (deg + 3) % 360;
		}
		else
		{
			deg -= 3;
			if (deg < 0) deg += 360
		}
			
		laser[0].x += Math.cos(deg * Math.PI / 180) * speed;
		laser[0].y += Math.sin(deg * Math.PI / 180) * speed;
	}
}