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

Mouse stalker 003

Super Simple Mouse stalker
超単純マウスストーカー
あんまり単純過ぎてもアレなので、マウス追随シェイプにブレンドモード操作とブラーフィルター適用をしてみました。
背景の色は白 or 黒をランダム
マウス追随オブジェクトの色は 0x000000 ~ 0xffffff をランダム
Get Adobe Flash player
by Aquioux 30 Dec 2008
// Super Simple Mouse stalker
// 超単純マウスストーカー
// あんまり単純過ぎてもアレなので、マウス追随シェイプにブレンドモード操作とブラーフィルター適用をしてみました。
// 背景の色は白 or 黒をランダム
// マウス追随オブジェクトの色は 0x000000 ~ 0xffffff をランダム
package {
	/**
	 * @author YOSHIDA, Akio
	 */
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	
	[SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "#ffffff")]

	public class Main extends Sprite {
		private var numOfFollowShape:uint = 8;	// マウス追随シェイプの数
		private var vctr:Vector.<FollowShape>;	// マウス追随シェイプ格納ベクター

		public function Main():void {
			// 下地
			var back:Shape = new Shape();
			var flg:uint = Math.floor(Math.random() * 2);	// flg : 0 or 1
			back.graphics.beginFill(0xffffff*flg);	// 背景色はランダムで黒/白
			back.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
			back.graphics.endFill();
			addChild(back);
			
			// マウス追随シェイプ
			vctr = new Vector.<FollowShape>(numOfFollowShape, true);
			var target:FollowShape = null;
			for (var i:uint = 0; i < numOfFollowShape; i++) {
				var followShape:FollowShape = new FollowShape(flg, target);
				followShape.x = -50;
				followShape.y = -50;
				vctr[i] = followShape;
				addChild(followShape);
				target = followShape;
			}
			
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
		
		private function enterFrameHandler(e:Event):void {
			var i:uint = numOfFollowShape;
			while (i--) { vctr[i].motion(); }
		}
		
	}
}


// マウス追随シェイプクラス
import flash.display.Shape;
import flash.display.BlendMode;
import flash.filters.BlurFilter;
import flash.filters.BitmapFilterQuality;

class FollowShape extends Shape {
	private var vx:Number = 0;
	private var vy:Number = 0;
	private var spring:Number = 0.01;
	private var friction:Number = 0.9;
	
	private var target:FollowShape;

	public function FollowShape(flg:uint, target:FollowShape = null):void {
		// 追随相手(一つ前の FollowShape)
		// 最初に生成された FollowShape は target が null になる
		this.target = target;
		
		// 形状生成
		var size:uint = 30;
		graphics.beginFill(Math.random() * 0xffffff);
		graphics.drawCircle(0, 0, size);
		graphics.endFill();
		
		// 背景色の白(flg==1)/黒(flg==0)で BlendMode を変える
		if (flg == 1) {
			blendMode = BlendMode.SUBTRACT;
		} else {
			blendMode = BlendMode.ADD;
		}
		
		// BlurFilter 適用
		filters = [new BlurFilter(16, 16, BitmapFilterQuality.HIGH)];
	}
	
	public function motion():void {
		var tx:Number;
		var ty:Number;
		if (target == null) {
			tx = root.mouseX;
			ty = root.mouseY;
		} else {
			tx = target.x;
			ty = target.y;
		}
		vx += (tx - x) * spring;
		vy += (ty - y) * spring;
		vx *= friction;
		vy *= friction;
		x += vx;
		y += vy;
	}
	
}