for(var i=1;i<=10;i++){ _root["m"+i].onEnterFrame = function(){ // 자신과 마우스커서 사이의 y축 거리 distance = Math.abs(this._y - _root._ymouse); // 거리에 따라 투명도 설정 this.rect._alpha = 30 + distance/4; this._xscale = 100 - distance/4; } ----------------------------------------------------------------------------------------------------------- ------피타고라스 공식을 이용한 이차원 평면상의 두점 (x1,y1)과 (x2,y2) 사이의 거리 r를 반환하는 함수 function distance(x1,y1,x2,y2) { var diffX = x2-x1; var diffY - y2-y1; var r = Math.sqrt(diffX*diffX+diffY*diffY); return r; } ----------------------------------------------------------------------------------------------------------- ------삼각함수를 이용한 원운동 onClipEvent (load) { // 원 운동의 중심 cx = _root.center._x; cy = _root.center._y; // 원 운동의 가로 및 세로길이 a = 150; b = 150; // 각도 t = 0; } onClipEvent (enterFrame) { // 원운동 만들기 x = cx+a*Math.cos(t); y = cy+b*Math.sin(t); // 원운동 식을 (cx, cy)를 중심으로 theta만큼 회전이동 시킴 tempx = x; x = cx + (x-cx)*Math.cos(theta) - (y-cy)*Math.sin(theta); y = cy + (tempx-cx)*Math.sin(theta) + (y-cy)*Math.cos(theta); // 회전이동시킨 점을 무비클립의 _x, _y 속성으로 설정 this._x = x; this._y = y; // 각도를 0.1만큼 증가시킴 t = t+0.1; } ----------------------------------------------------------------------------------------------------------- onClipEvent (load) { // 타원 운동의 중심 cx = _root.center._x; cy = _root.center._y; // 타원 운동의 가로 및 세로길이 a = 100; b = 200; // 매 프레임마다 증가할 각도 t = 0; // 타원을 회전이동시킬 각도, 30도만큼 회전 => 라디안으로 바꿈 theta = 30/180*Math.PI; } onClipEvent (enterFrame) { // 타원운동 만들기 x = cx+a*Math.cos(t); y = cy+b*Math.sin(t); // 타원운동 식을 (cx, cy)를 중심으로 theta만큼 회전이동 시킴 tempx = x; x = cx + (x-cx)*Math.cos(theta) - (y-cy)*Math.sin(theta); y = cy + (tempx-cx)*Math.sin(theta) + (y-cy)*Math.cos(theta); // 회전이동시킨 점을 무비클립의 _x, _y 속성으로 설정 this._x = x; this._y = y; // 각도를 0.1만큼 증가시킴 t = t+0.1; } ----------------------------------------------------------------------------------------------------------- ------수열을 이용하여 윈도우가 좌우로 빠르게 흔들리는 모습 onClipEvent(load){ // 좌우로 진동하도록 r 값을 설정, -1에 가까울수록 오랫동안 진동 r = -0.95; // 이동할 목적위치를 처음 시작 위치로 설정 t = this._x; // 처음 시작 위치 this._x = this._x + 20; } onClipEvent (enterFrame){ // 매 프레임마다 목적지 t를 향해 좌우로 진동하면서 이동함 this._x = r*this._x + (1-r)*t; } ----------------------------------------------------------------------------------------------------------- ------수열을 이용해서 윈도우가 드래그되고, 버튼 클릭하면 좌우로 빠르게 흔들리는 모습 /********** window 무비클립 **********/ onClipEvent(load){ // 좌우로 진동하도록 r 값을 설정, -1에 가까울수록 오랫동안 진동 r = -0.95; // 이동할 목적위치를 처음 시작 위치로 설정 t = this._x; // 처음 시작 위치 this._x = this._x + 20; } onClipEvent (enterFrame){ if(isDrag == false){ // 매 프레임마다 목적지 t를 향해 좌우로 진동하면서 이동함 this._x = r*this._x + (1-r)*t; } } /********** window 무비클립 속의 타이틀바 버튼 **********/ on(press){ this.startDrag(); isDrag = true; } on(release){ this.stopDrag(); t = this._x; isDrag = false; } /********** 좌우로 진동시키는 버튼 **********/ on(release){ _root.window._x = _root.window._x + 20; } ----------------------------------------------------------------------------------------------------------- ------관성 onClipEvent(enterFrame){ // speedx와 speedy 만큼 가로 및 세로축으로 이동하기 this._x += speedx; this._y += speedy; // Right키가 눌리면, 오른쪽으로 이동하기 if(Key.isDown(Key.RIGHT)){ speedx += 2; this._xscale = 100; } // Left키가 눌리면, 왼쪽으로 이동하기 if(Key.isDown(Key.LEFT)){ speedx -= 2; this._xscale = -100; } // Up키가 눌리면, 위로 이동하기 if(Key.isDown(Key.UP)){ speedy -= 2; } // Down키가 눌리면, 아래로 이동하기 if(Key.isDown(Key.DOWN)){ speedy += 2; } // 매 프레임마다 x 및 y축 속도를 5% 만큼씩 감소시킴 speedx *= 0.95; speedy *= 0.95; // 화면 밖으로 나가면 반대편에서 나타나게 하기 if(this._x > 550 + this._width){ this._x = 0 - this._width/2; }else if(this._x < 0 - this._width){ this._x = 550 + this._width/2; } if(this._y > 400 + this._height){ this._y = 0 - this._height/2; }else if(this._y < 0 - this._height){ this._y = 400 + this._height/2; } // 스페이스 키를 누르면, 마법쓰는 프레임으로 이동시키기 if(Key.isDown(Key.SPACE) && this._currentFrame < 19){ this.gotoAndPlay(19); } } ----------------------------------------------------------------------------------------------------------- ------atan(아크탄젠트)를 이용한 눈돌리기 /********** 메인타임라인 1프레임 **********/ // 무비클립을 (targetx, targety)로 회전시키는 함수 MovieClip.prototype.rotateTo = function(targetx, targety){ var diffX = targetx - this._x; var diffY = targety - this._y; this._rotation = Math.atan2(diffY, diffX)*180/Math.PI; }; /********** 눈 무비클립 **********/ onClipEvent (enterFrame) { this.rotateTo(_root._xmouse, _root._ymouse); } ----------------------------------------------------------------------------------------------------------- ------극좌표를 이용하여 다양한 그래프 그리기 /********** line 무비클립 **********/ // 두 점을 연결하는 라인을 만드는 메서드 선언 MovieClip.prototype.drawLine = function(x1, y1, x2, y2){ this._x = x1; this._y = y1; this._xscale = x2 - x1; this._yscale = y2 - y1; }; /********** 액션 무비클립 **********/ onClipEvent(load){ i=0; // 극좌표 r = 60*Math.cos(12*t)+20; // 극좌표를 직교좌표로 변환, (275, 200)만큼 평행이동 <- 가운데로 이동 prevX = this._x = r*Math.cos(t) + 275; prevY = this._y = r*Math.sin(t) + 200; } onClipEvent(enterFrame){ // 극좌표 r = 60*Math.cos(12*t)+20; // 극좌표를 직교좌표로 변환, (275, 200)만큼 평행이동 <- 가운데로 이동 this._x = r*Math.cos(t) + 275; this._y = r*Math.sin(t) + 200; // 라인 그리기 _root.line.duplicateMovieClip("line"+i, i); _root["line"+i].drawLine(this._x, this._y, prevX, prevY); // 과거 위치를 저장 prevX = this._x; prevY = this._y; // t 값을 0.1씩 증가 (각도를 증가시킴) t = t + 0.02; // 다음번 무비 복제를 위해 i를 1만큼 증가시킴 i++; } ----------------------------------------------------------------------------------------------------------- // 나머지를 구하는 함수 선언 _global.mod = function(a, b){ if(a%b<0){ return b + a%b; }else{ return a%b; } } |
'[ Design ] > Flash' 카테고리의 다른 글
DB에 변수명과 변수값들 보내는 sendAndLoad Class 화 (0) | 2012.09.13 |
---|---|
플래시 변수를 PHP로 넘겨주기 (0) | 2012.09.13 |
플래시 크로스 도메인 (0) | 2012.09.13 |
플래시 swf끼리 변수 호환은 어떻게 하나요? (0) | 2012.09.13 |
라디안,호도각 (0) | 2012.09.13 |
댓글