一筆書きで「ク」を書く

by Nowloading_
注釈した部分で30分近く悩んだ。終わってる(^q^) #59をposx[9] == posx[0]にしていた故
♥0 | Line 50 | Modified 2011-08-11 01:02:51 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.Sprite;
    import flash.events.Event;
    public class FlashTest extends Sprite {
        private var posx:Array = [70,90,140,140,110,100,130,130,95,80];
        //posxの各値はプログラム中で変わります
        private var startx:int = 70;        
        private var posy:Array = [80,50,50,90,130,130,90,60,60,80];
        private var starty:int = 80;
        private var a:Array;
        private var b:Array;
        private var t:int = 0;
        private var len:int = posx.length - 1;
        public function FlashTest() {
            a = new Array();
            b = new Array();
            a[9] = (posx[0] - posx[9]) / 20;
            b[9] = (posy[0] - posy[9]) / 20;         
            for(var i:int = 0;i<len;i++){
                a[i] = (posx[i+1] - posx[i]) / 20;
                b[i] = (posy[i+1] - posy[i]) / 20;
            }

            graphics.lineStyle(1);
            init();           
        }
        private function init():void{
            addEventListener(Event.ENTER_FRAME,oEF);            
        }
        //全部の線を同時に描画開始
        /* private function oEF(e:Event):void{
            for(var i:int=0;i<10;i++){
                graphics.moveTo(posx[i],posy[i]);
                posx[i] = posx[i] + a[i];
                posy[i] = posy[i] + b[i];
                graphics.lineTo(posx[i],posy[i]);
            }
            if(posx[0] >= 90){
                removeEventListener(Event.ENTER_FRAME,oEF);
                graphics.beginFill(0xff9999);
                graphics.lineStyle(0);
                graphics.lineTo(posx[0],posy[0]);
                for(var j:int=0;j<10;j++){
                    graphics.lineTo(posx[j],posy[j]);
                }
            }
        } */
        //一筆書き
        private function oEF(e:Event):void{
            graphics.moveTo(posx[t],posy[t]);
            posx[t] += a[t];
            posy[t] += b[t];
            graphics.lineTo(posx[t],posy[t]);
            if(t < 9){
                if((posx[t] == posx[t+1]) && (posy[t] == posy[t+1])){
                        t+=1;
                }                
            }else if(t==9){
                if(posx[9] == startx){                   
                    removeEventListener(Event.ENTER_FRAME,oEF);
                    graphics.beginFill(0xff9999);
                    graphics.lineStyle(0);
                    graphics.lineTo(posx[0],posy[0]);
                    for(var j:int=0;j<10;j++){
                        graphics.lineTo(posx[j],posy[j]);
                    }
                }
            }
        }
    }
}