/**
* 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;
}
}
}