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

by nan05aur forked from 円周上に等間隔に配置し、それぞれの向きを考慮させるサンプル。 (diff: 5)
円周上に等間隔に配置し、それぞれの向きを考慮させるサンプル。
♥0 | Line 46 | Modified 2012-02-02 15:09:10 | MIT License
play

ActionScript3 source code

/**
 * Copyright nan05aur ( http://wonderfl.net/user/nan05aur )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/buxw
 */

// forked from mmlemon_'s 円周上に等間隔に配置し、それぞれの向きを考慮させるサンプル。
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 = 25;
        // カードを保持するためのVector
        private var m_items:Vector.<Sprite>;
        // 回転させるための変数です。
        private var frame:int = 0;
        // 円半径
        private var radius:Number = 280;
        
        // アニメーションさせます。
        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(0x00aaaa, 1);
                item.graphics.drawRect(-25, -12.5, 60, 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();
        }
    }
}