파렌하이트 MYPI

파렌하이트
접속 : 3838   Lv. 55

Category

Profile

Counter

  • 오늘 : 361 명
  • 전체 : 115553 명
  • Mypi Ver. 0.3.1 β
[ㅋ개ㅋ소ㅋ리] 플래시 오브젝트 이동? (2) 2012/03/04 AM 10:30



코드
var speed = 0;

var key_up = Boolean(false);
var key_right = Boolean(false);
var key_left = Boolean(false);

var boxes_speed_x = int(0);
var boxes_speed_y = int(0);

stage.addEventListener(KeyboardEvent.KEY_DOWN, key_press);{
function key_press(e:KeyboardEvent){
if(e.keyCode == 38){key_up = Boolean(true)}
if(e.keyCode == 39){key_right = Boolean(true)}
if(e.keyCode == 37){key_left = Boolean(true)}
}
}
stage.addEventListener(KeyboardEvent.KEY_UP, key_out);{
function key_out(e:KeyboardEvent){
if(e.keyCode == 38){key_up = Boolean(false)}
if(e.keyCode == 39){key_right = Boolean(false)}
if(e.keyCode == 37){key_left = Boolean(false)}
}
}
boxes.addEventListener(Event.ENTER_FRAME, moving_box);{
function moving_box(e:Event){
if(key_up == true){
if(speed <= 10){speed += 0.1;}
boxes_speed_x = 1*Math.sin(boxes.rotation * (Math.PI/180));
boxes_speed_y = 1*Math.cos(boxes.rotation * (Math.PI/180));
boxes.x += boxes_speed_x * speed;
boxes.y -= boxes_speed_y * speed;
}
if(key_right == true){boxes.rotation += 3;}
if(key_left == true){boxes.rotation -= 3;}
speed_text.text = speed;
}
}

stage.addEventListener(Event.ENTER_FRAME, slowing);{
function slowing(e:Event){
if(speed > 0 && key_up == false){
speed -= 0.1;
boxes.x += boxes_speed_x * speed;
boxes.y -= boxes_speed_y * speed;}
if(speed < 0){
speed = 0;}
}
}

액션스크립트 이벤트 키보드를 배우던 중, 예제에 오브젝트 이동이 있어서 만들어보았습니다. 코드 내에는 삼각함수가 들어가 있을터인데, 저는 삼각함수를 배우지 않았을 뿐더러 위의 코드는 일종의 소스 가져오기의 결과물이지요.

boxes_speed_x = 1*Math.sin(boxes.rotation * (Math.PI/180));
boxes_speed_y = 1*Math.cos(boxes.rotation * (Math.PI/180));

코드의 핵심은 이 두 줄의 코드입니다.
사인은 x값, 코사인은 y값을 가지고 있지요. 메스pi는 원주율, 그러니까 파이(3.14)입니다.

제가 찾은 소스는 스크립트 2.0이기에, 3.0으로 변환하여 사용하고 있기에 어느정도 3.0에 익숙해졌다고 생각합니다만
xSpeed = 1*Math.sin(_rotation*(Math.PI/180));
ySpeed = 1*Math.cos(_rotation*(Math.PI/180));

코드는 외웠으나, 이해는 전혀하지 못한 상황이 연출 되었습니다-_-

x가 사인, y가 코사인인건 알겠는데, 왜 오브젝트 로테이션에 메스pi를 곱하는 걸까요? 게다가 메스pi 값인 3.14에 180은 왜 나누는 걸까요?
분명 나누는 값 180은 각도를 말하는 것이겠죠. 헌데, 각도라하면 직각인 90도, 전체 각도인 360도 있는데 왜 하필 180도 일까요?

20대 중반으로 접어들고 있지만, 학창시절에 배웠던 삼각함수는 모조리다 잊어버렸습니다.
오죽했으면 삼각함수를 처음 보고서 떠오른게 "파이가 몇이었지?" 였었으니...

신고

 

밥 로스    친구신청

단위가 라디안이라서?

에효효    친구신청

c랑 같다고 생각 했을때 sin()함수의 단위가 라디안 이라서 그렇습니다.
_rotation은 degree 이고 여기에 Math.PI/180 을 곱하게 되면 단위가 라디안으로 바뀌게 됩니다.
X