Flash CS4로 등가속도 운동에서
등속도 운동으로 변화하는 직선 운동 만들기 테스트.
5초까지는 등가속도로 가속하다가 5초 이후 등속도로 이동하게 만들려고 했지만 계속 가속도가 붙는 걸로 보인다.
moveChara()함수에 전해주는 가속도를 1에서 1/30로 변경하고 등가속도 구간을 5에서 3으로, 정지시간은
10초에서 150초로 변경. 여전히 등속 운동이 아니지만 이건 전철 등에서 바깥 풍경을 볼 때, 혹은 닌자가 빠르게
회전하며 잔상을 남기는 현상의, 그 상대속도에 따른 착시를 보여줘서 나름 흥미롭다.
40초엔 잔상 3개가, 60초엔 잔상 2개가 거의 멈춘 위치로 보이고 120초에 가까워
지면 공이 점점 거꾸로 이동하다가 120초에 멈추는 듯 보이곤 다시 빨라지는 듯 보이는 현상이 나타난다.
15/1/10 토
|
Flash AS3 소스:
(화면에 미리 'circleM'이란 이름의 원 무비클립과 'restartButtonM'이란 이름의 버튼 무비클립,
timeTxt, vNowTxt, dxTxt, xNowTxt란 명칭의 Dynamic Text들을 만들어두었다.)
var c1 = circleM;
var reBut = restartButtonM;
var t=0; //time
var ax=0; //x의 가속도
var dx=0; //단위시간당 이동량
var vx0=0; //초기속도
function init(){
trace("Start!");
c1.x=0, t=0, dx=0, vx0 = 0;
reBut.y = 350;
reBut.addEventListener(MouseEvent.MOUSE_UP,buttonOn);
stage.addEventListener(Event.ENTER_FRAME,loop);
stage.addEventListener(KeyboardEvent.KEY_UP,keybdUp);
}
function loop(e:Event){ //매 프레임 실행
moveChara(c1,1/30);
}
function moveChara(ch:MovieClip,ax){
t += 1/30; //초당 30프레임이므로 30으로 나눔
if(t < 3){ //3초간 등가속운동
vx0 = vx0 + ax * t;
dx = vx0 * t + ((1/2)*ax*t*t);
ch.x = ch.x + dx;
}else{ //이후 등속운동
dx = vx0 * t;
ch.x = ch.x + dx;
}
//공이 화면 우측 경계를 벗어나면 화면 좌측에 나타나게 하기
if(ch.x > stage.stageWidth) ch.x %= stage.stageWidth;
if(t > 150){ //150초뒤 멈추고 재시작 버튼 보이게 하기.
trace("Over 10 seconds");
stage.removeEventListener(Event.ENTER_FRAME,loop);
reBut.y = 240;
}
txtUpdate();
}
function txtUpdate(){ //각종 수치 표시
timeTxt.text = t;
vNowTxt.text = vx0;
dxTxt.text = dx;
xNowTxt.text = c1.x;
}
function buttonOn(e:MouseEvent){ //버튼 클릭시 처리
reBut.removeEventListener(MouseEvent.MOUSE_UP,buttonOn);
stage.removeEventListener(KeyboardEvent.KEY_UP,keybdUp);
init();
}
function keybdUp(e:KeyboardEvent){ //키보드 업시 처리 함수
switch(e.keyCode){
case(32):{ moveChara(c1,1/30); break; } //click space
case(96): init(); break; //numpad 0 click
default: break;
}
}
init() |