 Aşağıdaki kodlar 3 boyutlu bir küre ortaya çıkaracak. Bu kürenin ortaya çıkması için herhangi bir çizim vb. işlem yapmıyoruz. Sadece kodlar aracılığı ile güzel ve fare ile oynatılabilir bir küre ortaya çıkmış oluyor...
1. ActionScript 3.0 destekli bir flash sayfası açalım.
2. Action penceresini açalım (F9)
buraya aşağıdaki kodları yapıştıralım.
Kodlar:
var fLen:Number=2000;
var spBoard:Sprite=new Sprite();
this.addChild(spBoard);
spBoard.x=200;
spBoard.y=190;
var shBack:Shape=new Shape();
spBoard.addChild(shBack);
drawBack();
var shCube:Shape=new Shape();
spBoard.addChild(shCube);
var doRotate:Boolean=false;
var prevX:Number;
var prevY:Number;
var curTheta:Number=-10;
var curPhi:Number=60;
var nMesh:Number=30;
var tilesArray:Array=[];
var tilesColors:Array=[];
function drawBack():void {
shBack.graphics.lineStyle(1,0x000000);
shBack.graphics.beginFill(0x000000);
shBack.graphics.drawRect(-160,-160,320,320);
shBack.graphics.endFill();
}
setTilesArray();
renderView(curTheta,curPhi);
function setTilesArray():void {
var i:int;
var j:int;
var istep:Number;
var jstep:Number;
istep=(7/4)*Math.PI/nMesh;
jstep=Math.PI/nMesh;
for (i=0; i<=nMesh; i++) {
tilesArray[i]=[];
for (j=0;
j<=nMesh; j++) {
tilesArray[i][j]=[90*Math.cos(istep*i)*Math.sin(jstep*j),90*Math.sin(istep*i)*Math.sin(jstep*j),90*Math.cos(jstep*j)];
}
}
}
function renderView(t:Number,p:Number):void {
var i:int;
var j:int;
var n:int;
var distArray=[];
var dispArray=[];
var tilesNewArray=[];
var midPoint:Array=[];
var dist:Number;
var depLen:Number;
var coloFactor=1.2;
t=t*Math.PI/180;
p=p*Math.PI/180;
shCube.graphics.clear();
for (i=0; i<=nMesh; i++) {
tilesNewArray[i]=[];
for (j=0;
j<=nMesh; j++) {
tilesNewArray[i][j]=pointNewView(tilesArray[i][j],t,p);
}
}
for (i=0; i<nMesh; i++) {
if (firstRun) {
tilesColors[i]=[];
}
for (j=0; j<nMesh;
j++) {
midPoint[0]=(tilesNewArray[i][j][0]+tilesNewArray[i+1][j][0]+tilesNewArray[i][j+1][0]+tilesNewArray[i+1][j+1][0])/4;
midPoint[1]=(tilesNewArray[i][j][1]+tilesNewArray[i+1][j][1]+tilesNewArray[i][j+1][1]+tilesNewArray[i+1][j+1][1])/4;
midPoint[2]=(tilesNewArray[i][j][2]+tilesNewArray[i+1][j][2]+tilesNewArray[i][j+1][2]+tilesNewArray[i+1][j+1][2])/4;
dist=Math.sqrt(Math.pow(fLen-midPoint[0],2)+Math.pow(midPoint[1],2)+Math.pow(midPoint[2],2));
distArray.push([dist,i,j]);
if (firstRun) {
tilesColors[i][j]=combineRGB((2*coloFactor*midPoint[2]+100)*0.8+70,(2*coloFactor*midPoint[1]+100)*0.8+70,(2*coloFactor*midPoint[0]+100)*0.8+70);
}
}
}
distArray.sort(byDist);
for (i=0; i<=nMesh; i++) {
dispArray[i]=[];
for (j=0;
j<=nMesh; j++) {
dispArray[i][j]=[fLen/(fLen-tilesNewArray[i][j][0])*tilesNewArray[i][j][1],-fLen/(fLen-tilesNewArray[i][j][0])*tilesNewArray[i][j][2]];
}
}
depLen=distArray.length;
shCube.graphics.lineStyle(1,0x333333);
for (n=0; n<depLen; n++) {
i=distArray[n][1];
j=distArray[n][2];
shCube.graphics.moveTo(dispArray[i][j][0],dispArray[i][j][1]);
shCube.graphics.beginFill(tilesColors[i][j],1.0);
shCube.graphics.lineTo(dispArray[i][j+1][0],dispArray[i][j+1][1]);
shCube.graphics.lineTo(dispArray[i+1][j+1][0],dispArray[i+1][j+1][1]);
shCube.graphics.lineTo(dispArray[i+1][j][0],dispArray[i+1][j][1]);
shCube.graphics.lineTo(dispArray[i][j][0],dispArray[i][j][1]);
shCube.graphics.endFill();
}
firstRun=false;
}
function byDist(v:Array,w:Array):Number {
if (v[0]>w[0]) {
return -1;
} else if (v[0]<w[0]) {
return 1;
} else {
return 0;
}
}
function pointNewView(v:Array,theta:Number,phi:Number):Array
{
var newCoords:Array=[];
newCoords[0]=v[0]*Math.cos(theta)*Math.sin(phi)+v[1]*Math.sin(theta)*Math.sin(phi)+v[2]*Math.cos(phi);
newCoords[1]=-v[0]*Math.sin(theta)+v[1]*Math.cos(theta);
newCoords[2]=-v[0]*Math.cos(theta)*Math.cos(phi)-v[1]*Math.sin(theta)*Math.cos(phi)+v[2]*Math.sin(phi);
return newCoords;
}
function combineRGB(red:Number,green:Number,blue:Number):Number
{
var RGB:Number;
if (red>255) {
red=255;
}
if (green>255) {
green=255;
}
if (blue>255) {
blue=255;
}
if (red<0) {
red=0;
}
if (green<0) {
green=0;
}
if (blue<0) {
blue=0;
}
RGB=(red<<16) | (green<<8) | blue;
return RGB;
}
spBoard.addEventListener(MouseEvent.ROLL_OUT,boardOut);
spBoard.addEventListener(MouseEvent.MOUSE_MOVE,boardMove);
spBoard.addEventListener(MouseEvent.MOUSE_DOWN,boardDown);
spBoard.addEventListener(MouseEvent.MOUSE_UP,boardUp);
function boardOut(e:MouseEvent):void {
doRotate=false;
}
function boardDown(e:MouseEvent):void {
prevX=spBoard.mouseX;
prevY=spBoard.mouseY;
doRotate=true;
}
function boardUp(e:MouseEvent):void {
doRotate=false;
}
function boardMove(e:MouseEvent):void {
var locX:Number=prevX;
var locY:Number=prevY;
if (doRotate) {
prevX=spBoard.mouseX;
prevY=spBoard.mouseY;
curTheta+=(prevX-locX);
curPhi+=(prevY-locY);
renderView(curTheta,curPhi);
e.updateAfterEvent();
}
}
Herhangi bir çizim vb. yapmadan sadece Action Script 3.0
kodları ile güzel bir küre ortaya çıkmış oldu.
Artık önizleme yapabilirsiniz.
***Bu yazı 495 defa okunmustur.*** |