//****************************************************************************************
// ファイル名:Cube.as
// MTASCでコンパイルして swf ファイルを作るための ActionScript によるコード
// コンパイルは mtasc -version 8 -swf Cube.swf -main Cube.as -header 500:400:30
// All rights reserved. Copyright (C) 2007 YokahiYokatoki
//****************************************************************************************
class Cube
{
static function main()
{
var cube:Cube=new Cube(_root);
}
function Cube()
{
var n=2; // 2×2×2
var x0=230; // マージン
var y0=200;
var D=56; // キューブの一辺の長さ
var dd=D/12;
var As=3*D; // 画面の原点からの距離
var R=34*D; // 視点の位置
var mv=0;
var bx=new Array(); // 実座標
var by=new Array();
var bz=new Array();
var sx=new Array(); // 描画用座標
var sy=new Array();
for(var i=0; i< n; i++) // キューブ
{
bx[i]=new Array();
by[i]=new Array();
bz[i]=new Array();
sx[i]=new Array();
sy[i]=new Array();
for(var j=0; j< n; j++)
{
bx[i][j]=new Array();
by[i][j]=new Array();
bz[i][j]=new Array();
sx[i][j]=new Array();
sy[i][j]=new Array();
for(var k=0; k< n; k++)
{
bx[i][j][k]=new Array();
by[i][j][k]=new Array();
bz[i][j][k]=new Array();
sx[i][j][k]=new Array();
sy[i][j][k]=new Array();
for(var p=0; p<3; p++) // 3つの面(3,4,5面は見えないので除く)
{
bx[i][j][k][p]=new Array();
by[i][j][k][p]=new Array();
bz[i][j][k][p]=new Array();
sx[i][j][k][p]=new Array();
sy[i][j][k][p]=new Array();
for(var q=0; q<4; q++) // 4つのコーナー
{
bx[i][j][k][p][q]=new Array();
by[i][j][k][p][q]=new Array();
bz[i][j][k][p][q]=new Array();
sx[i][j][k][p][q]=new Array();
sy[i][j][k][p][q]=new Array();
}
}
}
}
}
var fcr=new Array(); // 面の色(初期状態)
for(var i=0; i< n; i++)
{
fcr[i]=new Array();
for(var j=0; j< n; j++)
{
fcr[i][j]=new Array();
for(var k=0; k< n; k++)
{
fcr[i][j][k]=new Array();
if(i==0){fcr[i][j][k][0]=0x222222; fcr[i][j][k][3]=0xFFFF00;}
else if(i==1){fcr[i][j][k][0]=0x00AA22; fcr[i][j][k][3]=0x222222;}
if(j==0){fcr[i][j][k][1]=0x222222; fcr[i][j][k][4]=0xAA0022;}
else if(j==1){fcr[i][j][k][1]=0xFF6600; fcr[i][j][k][4]=0x222222;}
if(k==0){fcr[i][j][k][2]=0x222222; fcr[i][j][k][5]=0x002288;}
else if(k==1){fcr[i][j][k][2]=0xDDDDDD; fcr[i][j][k][5]=0x222222;}
}
}
}
var flag=0; // 回転方向
var phi=-50; // 視点の方向
var theta=35;
var time=0;
var waiting=setInterval(function()
{
if(flag==0){time++;} else {time--;}
if(time>70 || time<-30){flag=1-flag;}
var csP=Math.cos(Math.PI/180*phi+0.01*time);
var siP=Math.sin(Math.PI/180*phi+0.01*time);
var csT=Math.cos(Math.PI/180*theta+0.005*time);
var siT=Math.sin(Math.PI/180*theta+0.005*time);
// 各点の実座標の作成-------------------------------------------------------
var c0=new Array();
var c1=new Array();
var c2=new Array();
c0[0]=D+dd; c0[1]=D+dd; c0[2]=D+dd; c0[3]=D+dd;
c1[0]=-D; c1[1]=D; c1[2]=D; c1[3]=-D;
c2[0]=-D; c2[1]=-D; c2[2]=D; c2[3]=D;
var ex=new Array();
var ey=new Array();
var ez=new Array();
for(var p=0; p<6; p++)
{
ex[p]=new Array();
ey[p]=new Array();
ez[p]=new Array();
}
for(var q=0; q<4; q++)
{
ex[0][q]=c0[q]; ey[0][q]=c1[q]; ez[0][q]=c2[q];
ex[1][q]=c2[q]; ey[1][q]=c0[q]; ez[1][q]=c1[q];
ex[2][q]=c1[q]; ey[2][q]=c2[q]; ez[2][q]=c0[q];
ex[3][q]=-c0[q]; ey[3][q]=c1[q]; ez[3][q]=c2[q];
ex[4][q]=c2[q]; ey[4][q]=-c0[q]; ez[4][q]=c1[q];
ex[5][q]=c1[q]; ey[5][q]=c2[q]; ez[5][q]=-c0[q];
}
// 各点と、描画座標の作成---------------------------------------------------------
for(var i=0; i< n; i++)
{
for(var j=0; j< n; j++)
{
for(var k=0; k< n; k++)
{
if(i==n-1 || j==n-1 || k==n-1)// 見えるものだけ描画
{
for(var p=0; p<3; p++) // 3つの面(3,4,5面は見えないので除く)
{
for(var q=0; q<4; q++) // 4つの頂点
{
bx[i][j][k][p][q][0]=ex[p][q]+(D+dd)*(2*i-1);
by[i][j][k][p][q][0]=ey[p][q]+(D+dd)*(2*j-1);
bz[i][j][k][p][q][0]=ez[p][q]+(D+dd)*(2*k-1);
var Px=bx[i][j][k][p][q][0];
var Py=by[i][j][k][p][q][0];
var Pz=bz[i][j][k][p][q][0];
var x1=Px*csP-Py*siP;// 描画座標に変換===========
var y1=Px*siP+Py*csP;
var z1=Pz;
var z2=z1*csT-x1*siT;
var x2=z1*siT+x1*csT;
var y2=y1;
sx[i][j][k][p][q][0]=x0+(R-As)/(R-x2)*y2;
sy[i][j][k][p][q][0]=y0-(R-As)/(R-x2)*z2;
//===============================================
}
}
}
}
}
}
var fig0=_root.createEmptyMovieClip("fig0", 99);
fig0.lineStyle(0, 0x000000, 0); // 全体の影
fig0.beginFill(0x000000, 10);
fig0.moveTo(-1000,400);fig0.lineTo(sx[0][1][1][2][3][mv], sy[0][1][1][2][3][mv]);
fig0.lineTo(sx[1][1][0][0][1][mv], sy[1][1][0][0][1][mv]);
fig0.lineTo(-1000,400);fig0.endFill();
fig0.beginFill(0x000000, 20);
fig0.moveTo(-1000,450);fig0.lineTo(sx[0][1][1][2][3][mv], sy[0][1][1][2][3][mv]);
fig0.lineTo(sx[1][1][0][0][1][mv], sy[1][1][0][0][1][mv]);
fig0.lineTo(-1000,450);fig0.endFill();
for(var i=0; i< n; i++) // キューブ
{
for(var j=0; j< n; j++)
{
for(var k=0; k< n; k++)
{
if(i==n-1 || j==n-1 || k==n-1)// 見えるものだけ描画
{
var cl=0x333333;
var fx=new Array();
var fy=new Array();
var sx0, sy0,sx1, sy1;
for(var p=0; p<3; p++)
{
fx[p]=new Array();
fy[p]=new Array();
for(var q=0; q<4; q++)
{
fx[p][q]=sx[i][j][k][p][q][0];
fy[p][q]=sy[i][j][k][p][q][0];
}
}
for(var h=0; h<3; h++) // 縦辺(光沢)、左上辺(光沢)
{
if(h==0){cl=0x333333;} else if(h==1){cl=0x555555;} else {cl=0x444444;}
fig0.lineStyle(3, cl, 100);
sx0=fx[0][2]+(fx[1][2]-fx[0][2])/3*h+2;
sy0=fy[0][2]+(fy[1][2]-fy[0][2])/3*h;
sx1=fx[0][1]+(fx[1][3]-fx[0][1])/3*h+2;
sy1=fy[0][1]+(fy[1][3]-fy[0][1])/3*h;
fig0.moveTo(sx0, sy0);fig0.lineTo(sx1, sy1);fig0.lineTo(sx0, sy0);fig0.endFill();
sx0=fx[2][1]+(fx[0][3]-fx[2][1])/3*h;
sy0=fy[2][1]+(fy[0][3]-fy[2][1])/3*h+2;
sx1=fx[2][2]+(fx[0][2]-fx[2][2])/3*h;
sy1=fy[2][2]+(fy[0][2]-fy[2][2])/3*h+2;
fig0.moveTo(sx0, sy0);fig0.lineTo(sx1, sy1);fig0.lineTo(sx0, sy0);fig0.endFill();
}
for(var h=1; h<6; h++) // 右上辺(光沢)
{
if(h<1){cl=0x666666;} else if(h<2){cl=0x888888;} else if(h<3){cl=0xaaaaaa;}
else if(h<4){cl=0x666666;} else {cl=0x444444;}
fig0.lineStyle(2, cl, 100);
sx0=fx[2][2]+(fx[1][2]-fx[2][2])/5*h;
sy0=fy[2][2]+(fy[1][2]-fy[2][2])/5*h;
sx1=fx[2][3]+(fx[1][1]-fx[2][3])/5*h;
sy1=fy[2][3]+(fy[1][1]-fy[2][3])/5*h;
fig0.moveTo(sx0, sy0);fig0.lineTo(sx1, sy1);fig0.lineTo(sx0, sy0);fig0.endFill();
}
fig0.lineStyle(0, 0x666666, 50); // 角
fig0.beginFill(0x555555, 80);
fig0.moveTo(fx[0][2], fy[0][2]);fig0.lineTo(fx[1][2], fy[1][2]);
fig0.lineTo(fx[2][2], fy[2][2]);fig0.lineTo(fx[0][2], fy[0][2]);fig0.endFill();
for(var p=0; p<3; p++) // 3つの面(3,4,5面は見えない)
{
fig0.lineStyle(0, 0x444444, 100);
fig0.beginFill(0x444444, 100);
fig0.moveTo(fx[p][0], fy[p][0]); for(var q=1; q<4; q++){fig0.lineTo(fx[p][q], fy[p][q]);}
fig0.lineTo(fx[p][0], fy[p][0]);fig0.endFill();
fig0.beginFill(fcr[i][j][k][p], 100); // 角に丸みをつけた色面
fig0.moveTo(fx[p][0]+0.04*(fx[p][1]-fx[p][0]), fy[p][0]+0.04*(fy[p][1]-fy[p][0]));
fig0.lineTo(fx[p][1]+0.04*(fx[p][0]-fx[p][1]), fy[p][1]+0.04*(fy[p][0]-fy[p][1]));
fig0.lineTo(fx[p][1]+0.04*(fx[p][2]-fx[p][1]), fy[p][1]+0.04*(fy[p][2]-fy[p][1]));
fig0.lineTo(fx[p][2]+0.04*(fx[p][1]-fx[p][2]), fy[p][2]+0.04*(fy[p][1]-fy[p][2]));
fig0.lineTo(fx[p][2]+0.04*(fx[p][3]-fx[p][2]), fy[p][2]+0.04*(fy[p][3]-fy[p][2]));
fig0.lineTo(fx[p][3]+0.04*(fx[p][2]-fx[p][3]), fy[p][3]+0.04*(fy[p][2]-fy[p][3]));
fig0.lineTo(fx[p][3]+0.04*(fx[p][0]-fx[p][3]), fy[p][3]+0.04*(fy[p][0]-fy[p][3]));
fig0.lineTo(fx[p][0]+0.04*(fx[p][3]-fx[p][0]), fy[p][0]+0.04*(fy[p][3]-fy[p][0]));
fig0.lineTo(fx[p][0]+0.04*(fx[p][1]-fx[p][0]), fy[p][0]+0.04*(fy[p][1]-fy[p][0]));
fig0.endFill();
}
}
}
}
}
}, 10) // この数値の単位は、ミリ秒(1/1000秒)
}
}
|