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()