MyTemplate
wonderfl で何か作るときの雛形
/**
* 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;
}
}