마이피
PS5
SWITCH
XSX
PC
VR/버튜버
모바일
뉴스
핫딜
취미갤
핫딜
L 게시판
커뮤니티
BEST
게임찾기
만화
피규어
프라
애니/책
AI 이미지
로그인
파렌하이트 MYPI
파렌하이트
접속 : 3838 Lv. 55
Category
전체보기
ㅋ낙ㅋ서(1)
ㅋ개ㅋ소ㅋ리(129)
ㅋ_ㅋ(12)
작업(91)
블렌더(3)
RPG MV(4)
일기(3)
작업2(26)
WH40K(0)
카라바인(6)
식단(11)
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대 중반으로 접어들고 있지만, 학창시절에 배웠던 삼각함수는 모조리다 잊어버렸습니다.
오죽했으면 삼각함수를 처음 보고서 떠오른게 "파이가 몇이었지?" 였었으니...
신고
밥 로스
친구신청
삭제
수정
2012/03/04 AM 11:05
단위가 라디안이라서?
에효효
친구신청
삭제
수정
2012/03/04 AM 11:11
c랑 같다고 생각 했을때 sin()함수의 단위가 라디안 이라서 그렇습니다.
_rotation은 degree 이고 여기에 Math.PI/180 을 곱하게 되면 단위가 라디안으로 바뀌게 됩니다.
방명록
전체보기
친구 리스트
전체보기
X