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