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

円周上に等間隔に配置し、それぞれの向きを考慮させるサンプル。

円周上に等間隔に配置し、それぞれの向きを考慮させるサンプル。
/**
 * Copyright mmlemon_ ( http://wonderfl.net/user/mmlemon_ )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/qiep
 */

package {
    import flash.display.Sprite;
	 import flash.events.Event;
	
	/**
	 * 円周上に等間隔に配置し、それぞれの向きを考慮させるサンプル。
	 */
	[SWF(backgroundColor=0x0,frameRate=60,width=800,height=600)]
	public class RotateSample extends Sprite
	{
		// カード数
		private static const ITEMS_NUM:uint = 10;
		// カードを保持するためのVector
		private var m_items:Vector.<Sprite>;
		// 回転させるための変数です。
		private var frame:int = 0;
		// 円半径
		private var radius:Number = 200;
		
		// アニメーションさせます。
		private function onRender(event:Event):void
		{
			for(var i:uint=0; i < ITEMS_NUM; i++)
			{
				// 基本的には、等間隔配置の計算+アニメーションさせるための値(frameが関わるやつ)
				// を行っています。
				var item:Sprite = m_items[i];
				// 角度を算出
				// 360°上に等間隔に配置する
				var radian:Number = (Math.PI * 2) / ITEMS_NUM * i + (frame*Math.PI/180);
				// 円周上の配置に半径を掛ける。中心はステージ中央。
				item.x = Math.cos(radian) * radius + stage.stageWidth/2;
				item.y = Math.sin(radian) * radius + stage.stageHeight/2;
				// カードの向きを調整する。
				item.rotation = 360/ITEMS_NUM*i+90 + frame;
			}
			// 回転させたいのでインクリメント
			frame++;
		}
		// 取りあえずカードを生成します。
		private function genItems():void
		{
			m_items = new Vector.<Sprite>();
			for(var i:uint = 0; i < ITEMS_NUM; i++)
			{
				var item:Sprite = new Sprite();
				item.graphics.beginFill(0xff00ff, 1);
				item.graphics.drawRect(-25, -12.5, 50, 25);
				item.graphics.endFill();
				addChild(item);
				m_items.push(item);
			}
		}
		
		private function init():void
		{
			genItems();
			addEventListener(Event.ENTER_FRAME, onRender, false, 0, false);
		}
		public function RotateSample()
		{
			init();
		}
	}
}