flash on 2010-9-29

by zahir
GraphicsDataで円を描いてみるテスト。
とりあえずサイズによって分割数を変更するようにしてみた。動いている分には問題はなさそうな気がする。最適な数値はどうなんでしょうね?
♥0 | Line 65 | Modified 2010-09-29 03:01:00 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.GraphicsStroke;
    import flash.text.TextField;
    import flash.display.GraphicsSolidFill;
    import flash.display.IGraphicsData;
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.display.GraphicsPath;
    import flash.display.Sprite;
    
    [SWF(frameRate="30")]
    public class FlashTest extends Sprite {
        private var t:TextField = new TextField();
        private var fill:GraphicsSolidFill;
        private var stroke:GraphicsStroke;
        private var n:int = 0;
        public function FlashTest() {
            addChild(t);
            fill = new GraphicsSolidFill(0xCCCCCC);
            stroke = new GraphicsStroke(1);
            stroke.fill = new GraphicsSolidFill(0xFF0000);
            addEventListener( Event.ENTER_FRAME, onEnter);
        }
        private function onEnter(e:Event):void
        {
            var g:Graphics = graphics;
            var r:Number = Math.cos( 0.01745 * (n++) ) * 200;
            r = (r < 0) ? r*-1 : r;
            g.clear();
            g.drawGraphicsData(new <IGraphicsData>[ fill,stroke, getPath(232,232,r) ]);
        }
        public function appendPath( path:GraphicsPath, cx:Number, cy:Number, r:Number):void
        {
            var n:Number = 0;
            var len:int = 360;
            var d:Vector.<Number> = path.data;
            var dl:int = d.length;
            var c:Vector.<int> = path.commands;
            var cl:int = c.length;
            var _cl:int = cl;
            
            if ( r <= 20 ) len = 18;
            else if ( r <= 30 ) len = 36;
            else if ( r <= 50 ) len = 72;
            else if ( r <= 100 ) len = 90;
            else if ( r <= 500 ) len = 180;
            else if ( r <= 1000 ) len = 360;
            else len = 720;
            t.text = len.toString();
            //
            n = 360 / len;
            for (var i:int = 0; i <= len; i++ )
            {
                var rad:Number = 0.01745 * n * i;
                c[cl++] = 2;
                d[dl++] = Math.cos( rad ) * r + cx;
                d[dl++] = Math.sin( rad ) * r + cy;
            }
            c[_cl] = 1;
        }
        
        public function getPath(cx:Number, cy:Number, r:Number):GraphicsPath
        {
            var path:GraphicsPath = new GraphicsPath( new <int>[], new <Number>[] );
            appendPath( path, cx, cy, r );
            return path;
        }
    }
}

Forked