flash on 2014-5-7

by maxs.maxs.90
♥0 | Line 77 | Modified 2014-05-08 04:28:17 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    public class FlashTest extends Sprite {
        var coord:Vector.<Number> = new Vector.<Number>();
        var tri:Vector.<int> = new Vector.<int>();
        var uv:Vector.<Number> = new Vector.<Number>();
        var col:Array = new Array(0xff0000,0xffff00,0x00ff00,0x00ffff,0x0000ff,0xff00ff,0xff0000);
        var alp:Array = new Array(1,1,1,1,1,1,1);
        var rat:Array = new Array(0,42,84,126,168,210,255);
        var polyNum:Number = 20;
        var radius:Number = 100;
        var height_:Number = 50;
        var length_:Number = 2 * Math.PI * radius;
        var fl:Number = 200;
        var Yk_x:Number = stage.stageWidth;
        var Yk_y:Number = stage.stageHeight;
        var rotY:int;
        var rotX:int;
        var line_:Boolean = true;
        var cylinder:Shape = new Shape();
        var BMD:BitmapData = new BitmapData(length_,height_);
        public function FlashTest() {
            // write as3 code here..
            addChild(cylinder);
            cylinder.x = Yk_x / 2;
            cylinder.y = Yk_y / 2;
            TEX();
            addEventListener(Event.ENTER_FRAME,fr);
            addEventListener(MouseEvent.CLICK,cl);
        }
        function TEX(){
            var m:Matrix = new Matrix();
            m.createGradientBox(length_,height_);
            var tex:Shape = new Shape();
            tex.graphics.beginGradientFill(GradientType.LINEAR,col,alp,rat,m);
            tex.graphics.drawRect(0,0,length_,height_);
            tex.graphics.endFill();
            BMD.draw(tex);
        }
        function fr(event:Event){
            rotY = (720 / Yk_x) * mouseX;
            rotX = (720 / Yk_y) * mouseY;
            draw();
        }
        function draw(){
            coord.length = 0;
            tri.length = 0;
            uv.length = 0;
            for(var i:int = 0; i < polyNum; i ++){
                var x_:int = Math.cos( (((360 / polyNum) * i) + rotY) * (Math.PI / 180) ) * radius;
                var z_:int = Math.sin( (((360 / polyNum) * i) + rotY) * (Math.PI / 180) ) * Math.cos(rotX * (Math.PI / 180)) * radius;
                var cy_:int = Math.sin(rotX * (Math.PI / 180)) * radius;
                var t_:int = fl / (fl + z_);
                coord.push(x_,-(height_ / 2) + cy_,x_,(height_ / 2) + cy_);
                tri.push(
                ((i + 1) == polyNum) ? 0 : (i * 2) + 2,
                (i * 2),
                (i * 2) + 1, 
                (i * 2) + 1,
                ((i + 1) == polyNum) ? 1 : (i * 2) + 3,
                ((i + 1) == polyNum) ? 0 : (i * 2) + 2);
                uv.push((1 / polyNum) * i,0,t_, (1 / polyNum) * i,1,t_);
                z_ = Math.sin( (((360 / polyNum) * (i + 1)) + rotY) * (Math.PI / 180) ) * Math.cos(rotX * (Math.PI / 180)) * radius;
                t_ = fl / (fl + z_);
                //uv.push((1 / polyNum) * (i + 1),0,t_, (1 / polyNum) * (i + 1),1,t_);
            }
            cylinder.graphics.clear();
            if(line_) cylinder.graphics.lineStyle(1,0x0099ff);
            cylinder.graphics.beginBitmapFill(BMD);
            cylinder.graphics.drawTriangles(coord,tri,uv,TriangleCulling.NEGATIVE);
            cylinder.graphics.endFill();
        }
        function cl(event:MouseEvent){
            line_ = (line_) ? false : true;
        }
    }
}