5. [최종 정리]
point, line 라는 링크이름의 무비클립이 있고
공백 무비 클립에 액션을 주고
onClipEvent(enterFrame) {
_root.reposition();
}
//프레임 될때마다 반복해서 실행해라 이거겠지
프레임 액션에 다음과 같은 액션을 준다.
// 정육면체의 점부터 만들어 보자구
function makePoints() {
points = new Array();
points[0] = {x: 30, y: 30, z: 30};
points[1] = {x: -30, y: 30, z: 30};
points[2] = {x: -30, y: -30, z: 30};
points[3] = {x: 30, y: -30, z: 30};
points[4] = {x: 30, y: -30, z: -30};
points[5] = {x: 30, y: 30, z: -30};
points[6] = {x: -30, y: 30, z: -30};
points[7] = {x: -30, y: -30, z: -30};
// create eight movie clips for cube corners
for(i=0;i<points.length;i++) {
attachMovie( "point", "point"+i, i )
}
}
// 정육면체의 12개의 직선
function makeLines() {
lines = new Array();
lines[0] = {p1: 0, p2: 1};
lines[1] = {p1: 1, p2: 2};
lines[2] = {p1: 2, p2: 3};
lines[3] = {p1: 3, p2: 0};
lines[4] = {p1: 4, p2: 5};
lines[5] = {p1: 5, p2: 6};
lines[6] = {p1: 6, p2: 7};
lines[7] = {p1: 7, p2: 4};
lines[8] = {p1: 0, p2: 5};
lines[9] = {p1: 1, p2: 6};
lines[10] = {p1: 2, p2: 7};
lines[11] = {p1: 3, p2: 4};
for(i=0;i<lines.length;i++) {
attachMovie( "line", "line"+i, 50+i )
}
}
// 3차원 좌표값 구하고 2차원 으로 변환하기
function plotPoint(object) {
// get coordinates from object
x = object.x;
y = object.y
z = object.z;
// 중앙에서 부터의 거리는?
radius = Math.sqrt (x*x+y*y);
// 처음각도는?
if (x == 0) angle = Math.atan(1000000);
else angle = Math.atan(y/x);
if (y < 0) angle += Math.PI;
// 회전을 더한다. 얘가 없으면 위 아래로만 돈다
angle += rotation;
// 새 좌표값을 구하고
realx = radius*Math.cos(angle);
realz = radius*Math.sin(angle);
realy = z;
// 중앙에서부터의 새로운 거리를 구하고
radius = Math.sqrt(realy*realy+realz*realz);
// 두번째 각도구하고
if (realz == 0) angle = Math.atan(1000000);
else angle = Math.atan(realy/realz);
if (realz < 0) angle += Math.PI;
// 수평각도가 더해진다.
angle += plane;
// 2차원 화면좌표값도 구해라
screenx = realx;
screeny = radius*Math.sin(angle);
screenz = radius*Math.cos(angle);
// 가운데에 놔둬라 (현재 스테이지가 550.400이다)
screenx += 275;
screeny += 200;
// 객체 현상태로
return({x:screenx,y:screeny,z:screenz});
}
// 점들을 서로 연결해서 정육면체의 모서리를 설정한다
function drawPoints() {
for(i=0;i<points.length;i++) {
loc = plotPoint(points[i]);
this["point"+i]._x = loc.x;
this["point"+i]._y = loc.y;
this["point"+i]._alpha = loc.z+100;
}
}
// 직선을 이용해 정육면체의 변 설정하기
function drawLines() {
for(i=0;i<lines.length;i++) {
loc1 = plotPoint(points[lines[i].p1]);
loc2 = plotPoint(points[lines[i].p2]);
this["line"+i]._x = loc1.x;
this["line"+i]._y = loc1.y;
this["line"+i]._xscale = loc2.x-loc1.x;
this["line"+i]._yscale = loc2.y-loc1.y;
this["line"+i]._alpha = loc1.z+100;
}
}
// 각 프레임에서 정육면체의 재위치 설정
function reposition() {
rotation += (275-_xmouse)/1000;
plane = -(200-_ymouse)/100;
drawPoints();
drawLines();
}
// 최초 함수를 호출하고 현재 프레임에서 정지해라
rotation = 0;
makePoints();
makeLines();
stop();
[출처] 락
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
☞자세히보기 |
|
|