シュールなAS3.0 #2 スプライトで☆を描画

by ultraTakePon
初心者用 ※備忘録&実験
間違いなどの指摘があるとよい
♥0 | Line 37 | Modified 2011-08-22 16:50:23 | MIT License
play

ActionScript3 source code

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

package {
    import flash.geom.Point;
    import flash.display.Sprite;
    import flash.events.*;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            // write as3 code here..
            var 頂点の数:uint = 5;    // 五角形の中に☆をつくりたい ※でかい値にするとえげつないことになります(わらい
            var 偶数奇数:uint = 0;
            var 半径:uint = 100;
            
            this.graphics.beginFill(0xFF0000);    // 塗りつぶし色を指定
            this.graphics.lineStyle(5,0x0,0.5);    // 線の太さを5、色を黒、透明度をなぜか0.5に指定
            
            // ここからが★を描くための主な処理
            // 「頂点の数 / 2」は五角形から☆を作る流れを意識したものです
            for (var 角度:Number = 0; 角度 < 360; 角度 += 360 / 頂点の数 / 2)
            {
                // 中心からの距離を決定します
                // 偶数奇数で半分にするかどうかを決めています(交互に値を変えるための処置)
                var 中心からの距離:Number;
                if (偶数奇数++ % 2) 中心からの距離 = 半径 * 0.5;    // 奇数であれば半分
                else               中心からの距離 = 半径;          // 偶数であればそのままの半径

                // 各頂点座標を計算します
                // 「Math.PI / 180」を乗算する意味は、「角度をラジアン値に変換する」
                // cos,sinはあの・・えっと・・・うん!!えっと、円のあれです
                var x:Number = Math.cos(角度 * Math.PI / 180) * 中心からの距離;
                var y:Number = Math.sin(角度 * Math.PI / 180) * 中心からの距離;
                //this.graphics.drawCircle(x,y,1);    // 頂点ん座標の位置を確認する用
                
                // 点をmoveToとlineToを使用してつないでいきます
                if (角度) this.graphics.lineTo(x,y);    // 角度が0以外はlineTo
                else      this.graphics.moveTo(x,y);    // 角度が0のときは最初ということでmoveTo
            }
            // つないだPath?内を塗りつぶします
            this.graphics.endFill();
            
            // graphicsに描画した☆の中心座標がデフォルトで(x,y) = (0,0)なので見える位置に移動
            this.x = 100;
            this.y = 100;

            // 以下、蛇足です
            // 動的な感じにしたかったんです
            // 「addEventListener」の意味は、スクリプトを実行している際に発生しているイベントを(スルーしていたもの)受け取るようにすることです
            // Event.ENTER_FRAMEは1フレーム毎に発生するイベントで、画面が手前にきているときに発生するようです(別の窓が手前にあると発生しないということ)
            // ↓ではそのイベントを受け取ったときにonEnterFrameという自作の関数を呼び出すようにしています
            this.addEventListener(Event.ENTER_FRAME,onEnterFrame)
            // 無名関数は使えないのかな?
   /*             function ():void
                {
                   //this.rotation++;
                   this.x += 11;
                });*/
        }
        
        // 色々プロパティをいじっています
        private function onEnterFrame(e:Event):void
        {
            this.x = 1 + (this.x % stage.stageWidth);
            this.y = 1 + (this.y % stage.stageHeight);
            this.rotation += 1;
            this.rotationX += 1;
            this.scaleX = -0.01 + (this.scaleX % 2);
            this.scaleY = -0.01 + (this.scaleY % 2);
        }

    }
}