Flash CS4로 '게임 수학&물리 입문'에 나온 C++ 예제들 플래시 액션스크립트 3.0으로 변경해 따라하기.

1-2: 물체 수평 이동.

시간 흐름에 따라 좌우로 이동하는 볼.

14/12/3 수

소스(스테이지상에 미리 'ballm'란 이름의 볼 무비클립을 놓아두었다):

var ball = ballm;

function init(){
	ball.x = 0;
	ball.v = 3;
	stage.addEventListener(Event.ENTER_FRAME,loop);
}
function loop(e:Event){
	ball.x += ball.v;
	//볼이 화면 좌우 경계지점에 닿을시 처리
	if(ball.x > stage.stageWidth-ball.width){
		ball.v *= -1; //반대방향으로 이동
		ball.x = stage.stageWidth-ball.width;
	}else if(ball.x < 0){
		ball.v *= -1;
		ball.x = 0;
	}
}
init();
			

 


1-2: 물체 키보드로 움직이기.

키보드의 상하좌우 키로 볼 상하좌우로 움직이기.

소스(스테이지상에 미리 'ballm'란 이름의 볼 무비클립을 놓아두었다):

var ball = ballm;
var up=false,down=false,left=false,right=false;

function init(){
	//볼의 초기 위치는 화면 중앙
	ball.x = (stage.stageWidth-ball.width)/2;
	ball.y = (stage.stageHeight-ball.height)/2;
	ball.v = 10;
	
	stage.addEventListener(Event.ENTER_FRAME,loop);
	stage.addEventListener(KeyboardEvent.KEY_DOWN,keyOn);
	stage.addEventListener(KeyboardEvent.KEY_UP,keyUps);
}
function keyOn(e:KeyboardEvent){
   switch(e.keyCode){
      case 38: up=true; break;//위쪽 화살표
      case 40: down=true; break;//아래쪽 화살표
      case 37: left=true; break;//왼쪽 화살표
      case 39: right=true; break;//오른쪽 화살표
      default: break;
   }
}
function keyUps(e:KeyboardEvent){
   switch(e.keyCode){
      case 38: up=false; break;//위쪽 화살표
      case 40: down=false; break;//아래쪽 화살표
      case 37: left=false; break;//왼쪽 화살표
      case 39: right=false; break;//오른쪽 화살표
      default: break;
   }
}
function loop(e:Event){
	if(up){
		ball.y -= ball.v;
		if(ball.y < 0){ ball.y = 0;}//화면 벗어나지 못하게 처리
	}
	if(down){
		ball.y += ball.v;
		if(ball.y > stage.stageHeight-ball.height){ 
			ball.y = stage.stageHeight-ball.height; 
		}
	}
	if(left){
		ball.x -= ball.v;
		if(ball.x < 0){ ball.x = 0; }
	}
	if(right){ 
		ball.x += ball.v;
		if(ball.x > stage.stageWidth-ball.width){ 
			ball.x = stage.stageWidth-ball.width; 
		}
	}
}
init();


1-2a: 물체 키보드로 움직이기(대각선 이동시 x 1/root 2).

키보드의 상하좌우 키로 볼 상하좌우로 움직이기.
대각선 이동시 x, y 이동값을 각각 루트 2로 나눠 직선 이동 때와 같은 속도로 이동하게 보정한 것. (위의 1-2 예제의 경우 대각선 이동시 직선 이동 때 보다 빠르게 이동한다)

소스(스테이지상에 미리 'ballm'란 이름의 볼 무비클립을 놓아두었다):

var ball = ballm;
var up=false,down=false,left=false,right=false;
var root2 = 1.41421; //루트 2의 값.

function init(){
	ball.x = (stage.stageWidth-ball.width)/2;
	ball.y = (stage.stageHeight-ball.height)/2;
	ball.v = 10;
	
	stage.addEventListener(Event.ENTER_FRAME,loop);
	stage.addEventListener(KeyboardEvent.KEY_DOWN,keyOn);
	stage.addEventListener(KeyboardEvent.KEY_UP,keyUps);
}
function keyOn(e:KeyboardEvent){
   switch(e.keyCode){
	   //keyCode 38은 Keyboard.UP로도 쓸 수 있다.
      case Keyboard.UP: up=true; break;//위쪽 화살표
      case Keyboard.DOWN: down=true; break;//아래쪽 화살표
      case Keyboard.LEFT: left=true; break;//왼쪽 화살표
      case Keyboard.RIGHT: right=true; break;//오른쪽 화살표
      default: break;
   }
}
function keyUps(e:KeyboardEvent){
   switch(e.keyCode){
      case 38: up=false; break;
      case 40: down=false; break;
      case 37: left=false; break;
      case 39: right=false; break;
      default: break;
   }
}
function loop(e:Event){
	if(up){
		if(left || right){ //대각선 이동시 처리
			ball.y -= ball.v/root2;
		}else{
			ball.y -= ball.v;
		}
		if(ball.y < 0){ ball.y = 0;}
	}
	if(down){
		if(left || right){
			ball.y += ball.v/root2;
		}else{
			ball.y += ball.v;
		}
		if(ball.y > stage.stageHeight-ball.height){ 
			ball.y = stage.stageHeight-ball.height; 
		}
	}
	if(left){
		if(up || down){
			ball.x -= ball.v/root2;
		}else{
			ball.x -= ball.v;
		}
		if(ball.x < 0){ ball.x = 0; }
	}
	if(right){ 
		if(up || down){
			ball.x += ball.v/root2;
		}else{
			ball.x += ball.v;
		}
		if(ball.x > stage.stageWidth-ball.width){ 
			ball.x = stage.stageWidth-ball.width; 
		}
	}
}
init();