絵を書く練習 [3日目:完成]

by iong
8.23.2009 start。1%くらい
8.24.2009 20%くらい。案外いける
8.25.2009 50%くらい イラレより軽い気がする。現在3KB
8.27.2009 完成。9.5KB。フィルタかけてるのを考えるとイラレのswf出力より軽い
数日後見て冷静になったときに再調整かも
♥0 | Line 910 | Modified 2009-08-27 19:16:28 | MIT License
play

ActionScript3 source code

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

package {
/*
    8.23.2009 start。1%くらい
    8.24.2009 20%くらい。案外いける
    8.25.2009 50%くらい イラレより軽い気がする。現在3KB
    8.27.2009 完成。9.5KB。フィルタかけてるのを考えるとイラレのswf出力より軽い
              数日後見て冷静になったときに再調整かも
*/
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.DisplayObject;
        import flash.display.BlendMode;
        import flash.display.Graphics;
        import flash.display.GradientType;
        import flash.display.SpreadMethod;
        import flash.geom.Matrix;

        import flash.filters.BlurFilter;

        import flash.display.Stage;
        import flash.display.StageScaleMode;

        private var _spPic:Sprite = new Sprite();

        private var aryGC:Array;
        private var aryGA:Array;
        private var aryGR:Array;
        private var matG:Matrix;

        // 輪郭色
        private var clOutline:Number= 0x444455;
        // 肌色
        private var clSkin:Number   = 0xffe6df;
        private var clSkinSh:Number = 0xffd3cc;

        [swf(width="465",height="465",bgcolor="#ffffff")]

        public function FlashTest() {
            // write as3 code here..
            stage.scaleMode= StageScaleMode.NO_SCALE;
            
            _spPic= drawPic();
            addChild(_spPic);
        }

        private function drawPic():Sprite
        {
            var retVal:Sprite = new Sprite();
            var pFace:Sprite  = pFace();
            var pBody:Sprite  = pBody();
            var pBack:Sprite  = pBack();
            var pArmR:Sprite  = pArmR();
            var pArmL:Sprite  = pArmL();
            var pHandR:Sprite = pHandR();
            var pHandL:Sprite = pHandL();
            var pShade:Sprite = pShade();
            var pEff:Sprite   = pEff();

            retVal.addChild(pBack);
            retVal.addChild(pBody);
            retVal.addChild(pArmR);
            retVal.addChild(pHandR);
            retVal.addChild(pFace);
            retVal.addChild(pHandL);
            retVal.addChild(pArmL);
            retVal.addChild(pShade);
            retVal.addChild(pEff);
            return retVal;
        }

        // ---------------------------

        private function pFace():Sprite
        {
            var retVal:Sprite= new Sprite();
            var pC1_1:Sprite = new Sprite();
            var pC1_2:Sprite = new Sprite();
            var pC2_1:Sprite = new Sprite();
            var pC2_2:Sprite = new Sprite();
            var pC3_1:Sprite = new Sprite();
            var pC3_2:Sprite = new Sprite();
            var pC3_3:Sprite = new Sprite();
            var pC3_4:Sprite = new Sprite();
            var pC4_1:Sprite = new Sprite();
            var pC4_2:Sprite = new Sprite();
            var pC4_3:Sprite = new Sprite();

            // 輪郭
            with(pC1_1.graphics){
                beginFill(clOutline,1);
                moveTo(-2,120);
                curveTo(6,6,85,-2);
                curveTo(156,-6, 157,115);
                curveTo(149,206, 60,230);
                curveTo(52,236, 25,229);
                curveTo(8,213, -1,181);
                curveTo(-7,160, -2,120);
            }
            pC1_1.x=5;

            aryGC  = [clSkin, clSkinSh];
            aryGA  = [1, 1];
            aryGR  = [0x66, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(160, 260, Math.PI/4*3, 0,0);
            with(pC1_2.graphics){
                beginGradientFill(GradientType.RADIAL, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0.7);
                moveTo(0,120);
                curveTo(8,8, 85,0);
                curveTo(155,-5, 155,115);
                curveTo(147,205, 60,230);
                curveTo(52,235, 25,228);
                curveTo(10,212, 0,180);
                curveTo(-5,160, 0,120);
            }
            pC1_2.x=5;

            // 目鼻口
            with(pC2_1.graphics){
                beginFill(clOutline,1);
                moveTo(0,0);
                curveTo(35,-5, 55,5);
                lineTo(53,10);
                curveTo(30,-5,0,0);

                moveTo(90,15);
                curveTo(100,10, 150,14);
                curveTo(105,15, 92,20);

                moveTo(20,20);
                lineTo(45,24);
                curveTo(52,30, 52,38);
                lineTo(45,33);
                lineTo(41,30);
                curveTo(20,20, 24,35);
                curveTo(24,45, 33,45);
                curveTo(24,45, 22,21);

                moveTo(90,44);
                lineTo(92,42);
                lineTo(94,32);
                curveTo(115,25, 124,30);
                lineTo(120,43);
                curveTo(130,38, 132,27);
                curveTo(128,20, 90,30);

                moveTo(53,82);
                curveTo(65,90, 75,86);
                curveTo(63,97, 53,82);

                moveTo(58,97);
                curveTo(76,103, 78,107);
                lineTo(55,104);
                curveTo(60,100, 58,97);
            }
            pC2_1.x = 0;
            pC2_1.y = 95;
            pC2_1.rotation= 10;

            // 目
            with(pC2_2.graphics){
                beginFill(clOutline,1);
                moveTo(27,24);
                curveTo(35,60, 43,28);
                lineTo(46,28);
                curveTo(35,62, 24,24);

                moveTo(95,29);
                curveTo(105,65, 114,28);
                lineTo(111,28);
                curveTo(105,62, 97,28);
            }
            pC2_2.x = 0;
            pC2_2.y = 95;
            pC2_2.rotation= 10;

            // めがね
            aryGC  = [0x666699, 0x666699];
            aryGA  = [0.4, 0.2];
            aryGR  = [0x66, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(65, 45, Math.PI/4, 0,0);
            with(pC3_1.graphics){
                beginGradientFill(GradientType.RADIAL, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,28);
                curveTo(0,0, 28,0);
                curveTo(65,5, 63,30);
                curveTo(60,45, 33,45);
                curveTo(6,40, 0,28);
            }
            pC3_1.x = -13;
            pC3_1.y = 110;
            with(pC3_2.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0.7);
                moveTo(5,15);
                curveTo(10,5, 25,0);
                curveTo(70,0, 67,12);
                curveTo(65,46, 30,45);
                curveTo(0,30, 5,15);
            }
            pC3_2.x = 68;
            pC3_2.y = 133;

            // めがね光
            aryGC  = [0xffffff, 0xffffff];
            aryGA  = [0.6, 0];
            aryGR  = [0, 0x99];
            matG   = new Matrix();
            matG.createGradientBox(150, 70, Math.PI/6*4, 0,0);
            with(pC3_3.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,28);
                curveTo(0,0, 28,0);
                curveTo(65,5, 63,30);
                curveTo(60,45, 33,45);
                curveTo(6,40, 0,28);
                moveTo(85,38);
                curveTo(90,28, 105,23);
                curveTo(150,23, 147,35);
                curveTo(145,69, 110,68);
                curveTo(80,53, 85,38);
            }
            pC3_3.x = -13;
            pC3_3.y = 110;

            // めがねフレーム
            with(pC3_4.graphics){
                beginFill(0x993333,1);
                moveTo(0,30);
                curveTo(3,3, 28,0);
                curveTo(60,2, 64,26);
                curveTo(64,24, 72,24);
                curveTo(80,26, 84,35);
                curveTo(92,19, 120,23);
                curveTo(155,24, 140,30);
                curveTo(150,30, 150,55);
                lineTo(140,59);
                curveTo(150,40, 135,28);
                curveTo(86,18, 87,45);
                lineTo(83,47);
                curveTo(80,27, 74,27);
                curveTo(63,27, 61,40);
                lineTo(58,38);
                curveTo(63,25, 58,18);
                curveTo(38,-8, 15,6);
            }
            pC3_4.x = -13;
            pC3_4.y = 110;

            // 髪
            with(pC4_1.graphics){
                beginFill(clOutline,1);
                moveTo(12,245);
                curveTo(-74,170,19,27);
                curveTo(45,-2, 97.5,-1);
                curveTo(186,9, 176,100);
                curveTo(166,148, 159,158);
                lineTo(164,168);
                curveTo(98,141, 99,91);
                lineTo(74,81);
                curveTo(71,62, 72,54);
                curveTo(22,105, 25,192);
                curveTo(13,140, 35,98);
                curveTo(-2,175, 12,245);
            }
            with(pC4_2.graphics){
                beginFill(0x666670, 1);
                moveTo(10,240);
                curveTo(-70,170, 20,27);
                curveTo(45,0, 97.5,0);
                curveTo(185,10, 175,100);
                curveTo(165,148, 158,158);
                lineTo(163,168);
                curveTo(100,140, 100,90);
                lineTo(75,80);
                curveTo(72,62, 73,54);
                curveTo(20,105, 25,190);
                curveTo(15,140, 35,95);
                curveTo(-5,175, 10,240);
            }

            aryGC  = [0xffffff, 0x000033];
            aryGA  = [0.5, 0.2];
            aryGR  = [0x00, 0xee];
            matG   = new Matrix();
            matG.createGradientBox(240, 168, Math.PI/2, 0,0);
            with(pC4_3.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(10,240);
                curveTo(-70,170, 20,27);
                curveTo(45,0, 97.5,0);
                curveTo(185,10, 175,100);
                curveTo(165,148, 158,158);
                lineTo(163,168);
                curveTo(100,140, 100,90);
                lineTo(75,80);
                curveTo(72,62, 73,54);
                curveTo(20,105, 25,190);
                curveTo(15,140, 35,95);
                curveTo(-5,175, 10,240);
            }

            retVal.addChild(pC1_1);
            retVal.addChild(pC1_2);
            retVal.addChild(pC2_1);
            retVal.addChild(pC2_2);
            retVal.addChild(pC3_1);
            retVal.addChild(pC3_2);
            retVal.addChild(pC3_3);
            retVal.addChild(pC3_4);
            retVal.addChild(pC4_1);
            retVal.addChild(pC4_2);
            retVal.addChild(pC4_3);

            retVal.scaleX = retVal.scaleY = 1.1;
            retVal.x = 233;
            retVal.y = -30;
            return retVal;
        }

        private function pBody():Sprite
        {
            var retVal:Sprite= new Sprite();
            var pC1_1:Sprite = new Sprite();
            var pC1_2:Sprite = new Sprite();
            var pC1_3:Sprite = new Sprite();
            var pC2_1:Sprite = new Sprite();
            var pC2_2:Sprite = new Sprite();
            var pC3_1:Sprite = new Sprite();
            var pC3_2:Sprite = new Sprite();
            var pC4_1:Sprite = new Sprite();
            var pC4_2:Sprite = new Sprite();
            var pC4_3:Sprite = new Sprite();

            // 体
            with(pC1_1.graphics){
                beginFill(clOutline, 1);
                moveTo(-3,250);
                curveTo(37,198, 77,138);
                curveTo(88,118, 98,99);
                curveTo(128,-1, 208,-1);
                curveTo(390,48, 412,78);
                curveTo(422,180, 401,253);
                curveTo(417,261, 417,328);
                curveTo(402,400, 226,400);
                curveTo(174,390, 172,280);
                lineTo(187,272);
                curveTo(191,272, 198,245);
                curveTo(157,215, 167,160);
                curveTo(165,157,160,162);
                curveTo(126,190, 83,281);
                curveTo(-2,352, -3,250);
            }
            aryGC  = [0x999999, 0x666666];
            aryGA  = [1, 1];
            aryGR  = [0, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(420, 420, Math.PI/2, 0,0);
            with(pC1_2.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,250);
                curveTo(40,200, 80,140);
                curveTo(88,120, 100,100);
                curveTo(130,0, 210,0);
                curveTo(390,50, 410,80);
                curveTo(420,180, 398,255);
                curveTo(415,260, 415,330);
                curveTo(400,400, 226,400);
                curveTo(175,390, 175,280);
                lineTo(190, 270);
                curveTo(193,270, 201,245);
                curveTo(160,215, 170,160);
                curveTo(165,155, 160,160);
                curveTo(125,190, 80,280);
                curveTo(0,350, 0,250);
            }

            aryGC  = [0xffffff, 0xffffff];
            aryGA  = [0, 0.25];
            aryGR  = [0xee, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(420, 800, 0, 16,10);
            with(pC1_3.graphics){
                beginGradientFill(GradientType.RADIAL, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,250);
                curveTo(40,200, 80,140);
                curveTo(88,120, 100,100);
                curveTo(130,0, 210,0);
                curveTo(390,50, 410,80);
                curveTo(420,180, 398,255);
                curveTo(415,260, 415,330);
                curveTo(400,400, 226,400);
                curveTo(175,390, 175,280);
                lineTo(190, 270);
                curveTo(193,270, 201,245);
                curveTo(160,215, 170,160);
                curveTo(165,155, 160,160);
                curveTo(125,190, 80,280);
                curveTo(0,350, 0,250);
            }

            with(pC2_1.graphics){
                beginFill(clOutline,1);
                moveTo(25,0);
                curveTo(15,15, 0,80);
                lineTo(12,92);
                lineTo(4,106);
                curveTo(25,155, 90,175);
                curveTo(78,210, 75,220);
                curveTo(95,260, 90,270);
                curveTo(95,255, 79,220);
                curveTo(85,175, 148,92);
            }
            pC2_1.rotation=6;
            pC2_1.x = 188;
            pC2_1.y = -10;

            aryGC  = [0x999999, 0x666666];
            aryGA  = [1, 1];
            aryGR  = [0, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(150, 270, Math.PI/2, 0,0);
            with(pC2_2.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(25,2);
                curveTo(17,17, 2,80);
                lineTo(14,92);
                lineTo(5,106);
                curveTo(27,154, 93,175);
                curveTo(83,175, 146,92);
            }
            pC2_2.rotation=6;
            pC2_2.x = 188;
            pC2_2.y = -10;

            aryGC  = [clSkinSh, clSkin];
            aryGA  = [1, 1];
            aryGR  = [0x66, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(110, 220, Math.PI/2, 0,0);
            with(pC3_2.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(225,110);
                curveTo(230,-10, 280,0);
                curveTo(318,20, 290,105);
                curveTo(270,160,265,160);
                curveTo(250,150,225,110);
            }

            with(pC4_1.graphics){
                beginFill(0xfff0f0,1);
                moveTo(233.3,123);
                curveTo(260,140, 279.7,132);
                curveTo(270,160,265,160);
                curveTo(250,150,233.3,123);
            }

            with(pC4_2.graphics){
                beginFill(clOutline,1);
                drawCircle(326,216,12);
            }
            pC4_2.scaleX=0.8;

            aryGC  = [0xffffff, 0xffffff];
            aryGA  = [0.5, 0.2];
            aryGR  = [0x00, 0x66];
            matG   = new Matrix();
            matG.createGradientBox(20, 20, 0, 313,203);
            with(pC4_3.graphics){
                beginGradientFill(GradientType.RADIAL, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                drawCircle(325,216,10);
            }
            pC4_3.scaleX=0.8;

            retVal.addChild(pC1_1);
            retVal.addChild(pC1_2);

            retVal.addChild(pC1_3);

            retVal.addChild(pC2_1);
            retVal.addChild(pC2_2);
            retVal.addChild(pC3_1);
            retVal.addChild(pC3_2);
            retVal.addChild(pC4_1);
            retVal.addChild(pC4_2);
            retVal.addChild(pC4_3);
            retVal.scaleX = retVal.scaleY = 0.9;
            retVal.x = 50;
            retVal.y = 130;
            return retVal;
        }

        private function pBack():Sprite
        {
            var retVal:Sprite= new Sprite();
            var pC1_1:Sprite = new Sprite();
            var pC1_2:Sprite = new Sprite();
            var pC1_3:Sprite = new Sprite();
            with(pC1_1.graphics){
                beginFill(clOutline,1);
                moveTo(63,0);
                curveTo(267,9, 268,160);
                lineTo(-2,160);
                curveTo(3,0, 63,0);
            }
            with(pC1_2.graphics){
                beginFill(0x666666,1);
                moveTo(65,0);
                curveTo(265,10, 265,160);
                lineTo(0,160);
                curveTo(5,0, 65,0);
            }
            aryGC  = [0xffffff, 0xffffff];
            aryGA  = [0, 0.4];
            aryGR  = [0xcc, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(265, 265, -(Math.PI/4), 0,0);
            with(pC1_3.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(65,0);
                curveTo(265,10, 265,160);
                lineTo(0,160);
                curveTo(5,0, 65,0);
            }
            retVal.addChild(pC1_1);
            retVal.addChild(pC1_2);
            retVal.addChild(pC1_3);
            retVal.x = 215;
            retVal.y = 345;
            return retVal;
        }

        private function pArmR():Sprite
        {
            var retVal:Sprite= new Sprite();
            var pC1_1:Sprite = new Sprite();
            var pC1_2:Sprite = new Sprite();
            var pC1_3:Sprite = new Sprite();
            var pC2_1:Sprite = new Sprite();
            var pC2_2:Sprite = new Sprite();

            with(pC1_1.graphics){
                beginFill(clOutline, 1);
                moveTo(-4,50);
                curveTo(-2,-2, 50,-2);
                curveTo(84,-2, 93,33);
                curveTo(86,60, 130,180);
                curveTo(130,200, 113,215);
                curveTo(110,266, 0,211);
            }
            aryGC  = [0x999999, 0x707070];
            aryGA  = [1, 1];
            aryGR  = [0, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(130, 260, Math.PI/2, 0,0);
            with(pC1_2.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,50);
                curveTo(0,0, 50,0);
                curveTo(80,0, 90,32);
                curveTo(83,60, 130,180);
                curveTo(130,200, 130,210);
                curveTo(110,266, 8,210);
            }

            aryGC  = [0xffffff, 0xffffff];
            aryGA  = [0, 0.4];
            aryGR  = [0x99, 0xdd];
            matG   = new Matrix();
            matG.createGradientBox(130, 260, -(Math.PI/3), 0,0);
            with(pC1_3.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,50);
                curveTo(0,0, 50,0);
                curveTo(80,0, 90,32);
                curveTo(83,60, 130,180);
                curveTo(130,200, 130,210);
                curveTo(110,266, 8,210);
            }

            with(pC2_1.graphics){
                beginFill(clOutline, 1);
                moveTo(-3,103);
                curveTo(-3,-3, 55,-3);
                curveTo(103,-3, 104,26);
                curveTo(113,41, 107,61);
                curveTo(72,162, 61,201);
                curveTo(40,222, 10,212);
                curveTo(-2,152, -2,100);
            }
            pC2_1.x = -10;
            pC2_1.y = -30;

            aryGC  = [0xffffff, 0xe9e9df];
            aryGA  = [1, 1];
            aryGR  = [0, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(130, 240, Math.PI/2, 0,0);
            with(pC2_2.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,100);
                curveTo(0,0, 55,0);
                curveTo(100,0, 100,25);
                curveTo(110,40, 105,60);
                curveTo(70,160, 60,200);
                curveTo(40,220, 10,210);
                curveTo(0,150,0,100);
            }
            pC2_2.x = -10;
            pC2_2.y = -30;
            retVal.addChild(pC1_1);
            retVal.addChild(pC1_2);
            retVal.addChild(pC1_3);
            retVal.addChild(pC2_1);
            retVal.addChild(pC2_2);

            retVal.scaleY = 1.2;
            retVal.x = -20;
            retVal.y = 122;
            return retVal;
        }

        private function pArmL():Sprite
        {
            var retVal:Sprite= new Sprite();
            var pC1_1:Sprite = new Sprite();
            var pC1_2:Sprite = new Sprite();
            var pC2_1:Sprite = new Sprite();
            var pC2_2:Sprite = new Sprite();
            var pC2_3:Sprite = new Sprite();

            with(pC1_1.graphics){
                beginFill(clOutline, 1);
                moveTo(3,14);
                curveTo(-1,-1, 85,-1);
                curveTo(74,11, 74,56);
                lineTo(10,55);
                curveTo(-1,35, 4,14);
            }
            pC1_1.x = 4;
            pC1_1.y = -6;

            aryGC  = [0xffffff, 0xe9e9df];
            aryGA  = [1, 1];
            aryGR  = [0, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(85, 50, Math.PI/2, 0,0);
            with(pC1_2.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(5,14);
                curveTo(0,0, 83,0);
                curveTo(73,10, 73,55);
                lineTo(12,55);
                curveTo(0,35, 5,14);
            }
            pC1_2.x = 4;
            pC1_2.y = -6;

            with(pC2_1.graphics){
                beginFill(clOutline, 1);
                moveTo(-2,44);
                curveTo(27,36, 88,-2);
                curveTo(88,-2, 90,2);
                curveTo(86,131, 117,180);
                lineTo(65,240);
                curveTo(54,220, 13,155);
                curveTo(8,120, 10,98);
                curveTo(10,60, -2,44);
            }

            aryGC  = [0x9e9e9e, 0x707070];
            aryGA  = [1, 1];
            aryGR  = [0, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(120, 240, Math.PI/2, 0,0);
            with(pC2_2.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,45);
                curveTo(28,38, 86,0);
                curveTo(88,0, 88,4);
                curveTo(86,130, 115,180);
                curveTo(116,214, 95, 236);
                lineTo(65,240);
                curveTo(55,220, 15,155);
                curveTo(10,120, 12,98);
                curveTo(12,60, 0,45);
            }

            aryGC  = [0xffffff, 0xffffff];
            aryGA  = [0, 0.5];
            aryGR  = [0x66, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(130, 260, -(Math.PI/4), 0,0);
            with(pC2_3.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,45);
                curveTo(28,38, 86,0);
                curveTo(88,0, 88,4);
                curveTo(86,130, 115,180);
                curveTo(116,214, 95, 236);
                lineTo(65,240);
                curveTo(55,220, 15,155);
                curveTo(10,120, 12,98);
                curveTo(12,60, 0,45);
            }

            retVal.addChild(pC1_1);
            retVal.addChild(pC1_2);
            retVal.addChild(pC2_1);
            retVal.addChild(pC2_2);
            retVal.addChild(pC2_3);
            retVal.rotation = 6;
            retVal.scaleX   = 0.9;
            retVal.scaleY   = 0.85;
            retVal.x = 320;
            retVal.y = 220;
            return retVal;
        }

        private function pHandR():Sprite
        {
            var retVal:Sprite= new Sprite();
            var pC1_1:Sprite = new Sprite();
            var pC1_2:Sprite = new Sprite();
            var pC1_3:Sprite = new Sprite();
            with(pC1_1.graphics){
                beginFill(clOutline,1);
                moveTo(-3,-3);
                lineTo(108,-3);
                curveTo(111,15, 111,40);
                curveTo(111,50, 92,82);
                curveTo(71,97, 46,182);
                curveTo(20,223, 0,223);
            }
            with(pC1_2.graphics){
                beginFill(clSkinSh,1);
                moveTo(0,0);
                lineTo(105,0);
                curveTo(108,15, 108,40);
                curveTo(108,50, 90,80);
                curveTo(70,95, 45,180);
                curveTo(20,220, 0,220);
            }

            aryGC  = [0xff6600, 0xff6600];
            aryGA  = [0, 0.2];
            aryGR  = [0x99, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(150, 350, Math.PI/4, -25,0);
            with(pC1_3.graphics){
                beginGradientFill(GradientType.RADIAL, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,0);
                lineTo(105,0);
                curveTo(108,15, 108,40);
                curveTo(108,50, 90,80);
                curveTo(70,95, 45,180);
                curveTo(20,220, 0,220);
            }

            retVal.addChild(pC1_1);
            retVal.addChild(pC1_2);
            retVal.addChild(pC1_3);

            retVal.scaleY=1.1;
            retVal.x = -15;
            retVal.y = -5;
            return retVal;
        }

        private function pHandL():Sprite
        {
            var retVal:Sprite= new Sprite();
            var pC1_1:Sprite = new Sprite();
            var pC1_2:Sprite = new Sprite();
            var pC1_3:Sprite = new Sprite();
            var pC1_4:Sprite = new Sprite();

            with(pC1_1.graphics){
                beginFill(clOutline, 1);
                moveTo(58,72);
                curveTo(64,52, 71,44);
                curveTo(62,25, 61,8);
                curveTo(59,3, 63,3);
                curveTo(65,3, 67,7);
                curveTo(80,39, 84,46);
                lineTo(78,67);
            }
            pC1_1.rotation=14;
            pC1_1.x = 12;
            pC1_1.y = -8;
            with(pC1_2.graphics){
                beginFill(clSkinSh,1);
                moveTo(60,72);
                curveTo(65,52, 72,44);
                curveTo(63,25, 60,8);
                curveTo(59,3, 63,3);
                curveTo(65,3, 67,7);
                curveTo(79,39, 83,46);
                lineTo(78,67);
            }
            pC1_2.rotation=14;
            pC1_2.x = 12;
            pC1_2.y = -8;

            with(pC1_3.graphics){
                beginFill(clOutline,1);
                moveTo(3,165);
                curveTo(3,155, 2,145);
                curveTo(-1,115, 2,112);
                curveTo(4,100, 19,92);
                curveTo(39,82, 45,68);
                curveTo(48,44, 39,14);
                curveTo(38,6, 46,13);
                curveTo(55,44, 56,52);
            }
            aryGC  = [clSkin, clSkinSh];
            aryGA  = [1, 1];
            aryGR  = [0, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(90, 165, Math.PI/2, 0,0);
            with(pC1_4.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(5,165);
                curveTo(5,155, 3,145);
                curveTo(0,115, 3,112);
                curveTo(6,100, 20,93);
                curveTo(40,82.5, 44,70);
                curveTo(47,44, 40,14);
                curveTo(40,8, 43,8);
                curveTo(46,8, 47,14);
                curveTo(57,44, 58,52);
                curveTo(58,34, 48,6);
                curveTo(48,0, 51,0);
                curveTo(54,0, 55,4);
                lineTo(65,32);
                lineTo(72,58);
                curveTo(77,66, 75,72);
            }
            retVal.addChild(pC1_1);
            retVal.addChild(pC1_2);
            retVal.addChild(pC1_3);
            retVal.addChild(pC1_4);
            retVal.scaleX = 1.1;
            retVal.scaleY = 1.2;
            retVal.x = 330;
            retVal.y = 75;
            return retVal;
        }

        private function pShade():Sprite
        {
            var retVal:Sprite= new Sprite();
            var pC1_1:Sprite = new Sprite();
            var pC1_2:Sprite = new Sprite();
            var pC2_1:Sprite = new Sprite();
            var pC2_2:Sprite = new Sprite();
            var pC3_1:Sprite = new Sprite();

            var blurW1:BlurFilter = new BlurFilter(4,8);
            var blurW2:BlurFilter = new BlurFilter(8,8);

            aryGC  = [0xccffff, 0xccffff];
            aryGA  = [0.7, 0];
            aryGR  = [0x66, 0xff];
            matG   = new Matrix();
            matG.createGradientBox(60, 55, 0, 0,0);
            with(pC1_1.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(13,0);
                curveTo(5,25, 45,25);
                lineTo(47,23);
                lineTo(55,18);
                lineTo(45,23);
                curveTo(-5,40, 13,0);
            }
            pC1_1.filters   = [blurW1];
            pC1_1.blendMode = BlendMode.ADD;
            pC1_1.rotation  = 30;
            pC1_1.x = 250;
            pC1_1.y = -10;

            aryGC  = [0xccffff, 0xccffff];
            aryGA  = [0, 0.7];
            aryGR  = [0, 0xe0];
            matG   = new Matrix();
            matG.createGradientBox(100, 55, 0, 0,0);
            with(pC1_2.graphics){
                beginGradientFill(GradientType.LINEAR, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 0);
                moveTo(0,22);
                curveTo(60,30, 60,0);
                curveTo(70,10, 70,30);
                curveTo(40,40, 0,22);
            }
            pC1_2.filters   = [blurW1];
            pC1_2.blendMode = BlendMode.ADD;
            pC1_2.x = 360;
            pC1_2.y = 25;

            with(pC2_1.graphics){
                beginFill(0xffffff,0.4);
                moveTo(2,2);
                curveTo(1,1, 0,5);
                curveTo(16,12, 11,36);
                curveTo(24,20, 2,2);
                moveTo(46,42);
                curveTo(45,22, 75,22);
            }
            pC2_1.x = 270;
            pC2_1.y = 97;

            with(pC2_2.graphics){
                beginFill(0x666699,0.3);
                moveTo(0,30);
                curveTo(33,35, 38,0);
                lineTo(45,6);
                curveTo(48,45, 0,30);
            }
            pC2_2.x = 330;
            pC2_2.y = 129;

            with(pC3_1.graphics){
                beginFill(0xffffff,0.5);
                moveTo(0,55);
                curveTo(5,20, 20,0);
                curveTo(19,18, 20,50);
                moveTo(138,-10);
                curveTo(133,-10, 133,35);
                curveTo(108,55, 96,75);
            }
            pC3_1.x = 286;
            pC3_1.y = 125;
            pC3_1.filters = [blurW2];

            retVal.addChild(pC1_1);
            retVal.addChild(pC1_2);
            retVal.addChild(pC2_1);
            retVal.addChild(pC2_2);
            retVal.addChild(pC3_1);
            return retVal;
        }

        private function pEff():Sprite
        {
            var retVal:Sprite= new Sprite();
            var pC1_1:Sprite = new pDC(15);
            var pC1_2:Sprite = new pDC(5);
            pC1_1.x = 86;
            pC1_1.y = 20;
            pC1_2.x = 92;
            pC1_2.y = 45;

            var pC2_1:Sprite = new pDC(8);
            var pC2_2:Sprite = new pDC(3);
            var pC2_3:Sprite = new pDC(5);
            var pC2_4:Sprite = new pDC(6);
            pC2_1.x = 207;
            pC2_1.y = 108;
            pC2_2.x = 402;
            pC2_2.y = 14;
            pC2_3.x = 200;
            pC2_3.y = 125;
            pC2_4.x = 412;
            pC2_4.y = 10;

            var pC3_1:Sprite = new pDC(16);
            var pC3_2:Sprite = new pDC(160);
            var pC3_3:Sprite = new pDC(40);
            pC3_1.x = 420;
            pC3_1.y = 190;
            pC3_2.x = 120;
            pC3_2.y = 560;
            pC3_3.x = 460;
            pC3_3.y = 370;
            pC3_1.filters= [new BlurFilter(8,8)]
            pC3_2.filters= [new BlurFilter(64,64)]
            pC3_3.filters= [new BlurFilter(32,32)]

            retVal.addChild(pC1_1);
            retVal.addChild(pC1_2);
            retVal.addChild(pC2_1);
            retVal.addChild(pC2_2);
            retVal.addChild(pC2_3);
            retVal.addChild(pC2_4);
            retVal.addChild(pC3_1);
            retVal.addChild(pC3_2);
            retVal.addChild(pC3_3);
            return retVal;
        }
    }
}

import flash.display.Sprite;
class pDC extends Sprite
{
	public function pDC(r:uint):void
	{
		with(graphics){
			beginFill(0xffffff,0.7);
			drawCircle(0,0, r);
		}
	}
}