カテゴリー/アーカイブスへ移動

記事見出し索引

ばね -内接多角形への適用- : ActionScript

ばね運動を内接多角形へ適用

//--------------------------------------------------------------------------
//
//   内接多角形へのイージングの適用
//
//--------------------------------------------------------------------------
function Polygon()
{
	// 描画先
	var target:MovieClip;
	// 頂点の数
	var vertexLength:Number;
	// 半径
	var radius:Number;
	// 最大半径
	var maxRadius:Number;
	// 半径速度
	var radiusVelocity:Number = 0;
	// ばね定数
	var spring:Number = 0.02;
	// 摩擦
	var friction:Number = 0.95;
	// タイマー
	var timer:Number;
	// 初期化 : 描画先, 頂点の数, 初期半径, 最大半径
	this.initPolygon = function(argTarget, argVertexLength, argRadius, argMaxRadius)
	{
		target = argTarget;
		vertexLength = argVertexLength;
		radius = argRadius;
		maxRadius = argMaxRadius;
	};
	this.startInterval = function()
	{
		timer = setInterval(drawSpring, 24);
	};
	// 多角形の描画 : 頂点の数, 半径
	var drawSpring = function ()
	{
		// 最大半径との距離
		var radiusDistance = maxRadius - radius;
		// 半径加速度
		var radiusAccel = radiusDistance * spring;
		// 半径速度
		radiusVelocity += radiusAccel;
		// 最大化判定
		if (Math.abs(radiusAccel) < spring && Math.abs(radiusVelocity) < spring)
		{
			clearInterval(timer);
		}
		else
		{
			// 摩擦
			radiusVelocity *= friction;
			// ばね運動
			radius += radiusVelocity;
		}
		var cosArr:Array = new Array();
		var sinArr:Array = new Array();
		for (i = 0; i < vertexLength; i++)
		{
			// 0≦radian<2π
			var radian = Math.PI * 2 * i / vertexLength;
			cosArr[i] = Math.cos(radian);
			sinArr[i] = Math.sin(radian);
		}
		// 終点の角度はMath.PI*2
		cosArr[cosArr.length] = Math.cos(Math.PI * 2);
		sinArr[sinArr.length] = Math.sin(Math.PI * 2);
		// 多角形描画
		target.clear();
		target.lineStyle(1, 0x000000, 100);
		target.moveTo(cosArr[0] * radius, sinArr[0] * radius);
		for (var i = 0; i < vertexLength; i++)
		{
			target.lineTo(cosArr[i + 1] * radius, sinArr[i + 1] * radius);
		}
	};
}
var o = new Polygon();
var target = _root.createEmptyMovieClip('target', _root.getNextHighestDepth());
target._x = Stage.width / 2;
target._y = Stage.height / 2;
// Polygonの初期化 : 描画先, 頂点の数, 初期半径, 最大半径
o.initPolygon(target, 8, 50, 100);
// 多角形の描画
o.startInterval();

  このページの上へ

スポンサード リンク

  Yahoo!ブックマークに登録    Google  この記事をクリップ!  BuzzurlにブックマークBuzzurlにブックマーク

2008/8/14 木 | draw, graphic, motion, ActionScript, spring | 固定リンク |

この記事にはまだコメントがついていません。

コメントの投稿

段落や改行は自動挿入です。メールアドレスはサイト上では非表示です。
使用できる HTML タグ: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

(必須)

(必須)


トラックバックURL