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

MyTemplate

wonderfl で何か作るときの雛形
Get Adobe Flash player
by autumngoodluck 30 Dec 2009
/**
 * Copyright autumngoodluck ( http://wonderfl.net/user/autumngoodluck )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/qnvU
 */

/*
 * wonderfl で何か作るときの雛形
 */
package
{
    import flash.display.Sprite;
	import flash.events.Event;

    [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="25")]
    public class MyTemplate extends Sprite
    {
		private var _ball:MyBall;
    				
		/*
		 * コンストラクタ
		 *
		 * すべての始まり。ここで様々な初期化(事前準備)を行う。
		 */
        public function MyTemplate()
        {
			_ball   = new MyBall(30, 0x00FF00);
			_ball.x = stage.stageWidth  / 2;
			_ball.y = stage.stageHeight / 2;
			addChild(_ball);

			addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
        }
        
        /*
         * ループ処理
         *
         * ボールを動かす。
         */
		public function loop(event:Event):void
        {
			_ball.move();
        }
    }
}

import flash.display.GradientType;
import flash.display.Sprite;
import flash.geom.Matrix;

/*
 * サンプル用のボールっぽいクラス
 *
 * といっても円を描いているだけ。
 */
class MyBall extends Sprite
{
	/*
	 * 速度
	 */
	private var _velocityX:Number;
	private var _velocityY:Number;

	public function MyBall(radius:Number, color:uint)
	{
		/*
		 * グラデーション塗りはよくわかっていないため、適当にプログラミングしている。
		 */
		var gradientType:String = GradientType.RADIAL;
		var colors:Array        = [color, 0x000000];
		var alphas:Array        = [1, 1];
		var ratios:Array        = [0, 255];
		var matrix:Matrix       = new Matrix();
		
		matrix.createGradientBox(radius * 3, radius * 3, 0, -radius * 1.8, -radius * 1.8);
		graphics.beginGradientFill(gradientType, colors, alphas, ratios, matrix);
		graphics.drawCircle(0, 0, radius);
		graphics.endFill();
		
		_velocityX = 0;
		_velocityY = 0;
	}

	/*
	 * 速度に応じて移動
	 *
	 * マウスカーソルに向かって移動する。
	 */	
	public function move():void
	{
		_velocityX = MyMotion.elastic(x, stage.mouseX, 0.15, 0.85, _velocityX);
		_velocityY = MyMotion.elastic(y, stage.mouseY, 0.15, 0.85, _velocityY);
//		_velocityX = MyMotion.friction(x, stage.mouseX, 10);
//		_velocityY = MyMotion.friction(y, stage.mouseY, 10);

		x += _velocityX;
		y += _velocityY;
	}
}

/*
 * 運動表現に関する便利な(よく使う)メソッドを提供するクラス
 */
class MyMotion
{
	/*
	 * 度からラジアンへの変換
	 */
	public static function deg2Rad(angle:Number):Number
	{
		return angle * (Math.PI / 180);
	}

	/*
	 * フックの法則を使った弾性による速度の算出
	 *
	 * 引数
	 *   start    - スタート位置
	 *   stop     - ストップ位置
	 *   k        - バネの定数(バネの強さ)
	 *   damp     - 減衰係数(バネの弾性力がどれくらいの割合で衰えるのか)
	 *   velocity - 現在の速度
	 */
	public static function elastic(start:Number, stop:Number, k:Number, damp:Number, velocity:Number):Number
	{
		velocity += -k * (start - stop);
		return velocity *= damp;
	}
	
	/*	
	 * 摩擦による速度の算出
	 *
	 * 引数
	 *   start - スタート位置
	 *   stop  - ストップ位置
	 *   k     - 摩擦係数(デフォルト値 = 10)
	 *           この値が小さいと移動距離が長くなる(ストップ位置に早く到達)
	 *           この値が大きいと移動距離が小さくなる(ストップ位置にゆっくり到着)
	 */
	public static function friction(start:Number, stop:Number, k:Number = 10):Number
	{
		return (stop - start) / k;
	}
}