오랜만에 플래시를 해서 그런가;;;레이어 붙여넣기하다가 text 레이어 설정하는거 몰라서 ㅠㅠ힘들었네..용

   this.attachMovie("roof", kName, ++depth);

이런식으로 depth를 늘리다보니 레이어가 무수히 많이 생겨서
나중에는 화면상에 텍스트들이 가리는 현상이 생기는군요..

무비클립일 경우에는 jump.swapDepths(10000); 이런식으로 레이어 처리하면되는데
나머지 버튼이나 text 같은경우는 어떻게 해야할지 몰라서 고민했습니다...

그럴땐 그냥-_-무비클립에 넣어서 ....하면 되는군요...ㅠ

혹시 다른 방법이 있으신 분은~ 알려주세요~

728x90
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
 keyListener.onKeyUp = function() {

추가할 내용

 };
};
Key.addListener(keyListener);

엔터프레임 밖에 위 내용을 적어주세요^^

플래시에 키 다운 후 업 인식할 경우가 많아 올려놓습니다.~
728x90
 가장 먼저 단진동이란 어느 한 기준으로 좌우로
대칭되도록 움직이는 모습을또는 힘을 나타냅니다.

단진동의 값을 얻기 위해 물리에 용수철의  F= -kx 공식을 이용하였습니다.


일단 F의 값을 액션스크립트에 맞게 바꾸도록 합시다. F= ma입니다.
여기서 m은 질량을 나타내고 a는 가속도를 나타냅니다.
질량은 어차피 정해지는 상수 값이니까 넘어가고
가속도(a)의 값을 어떻게 액션스크립트 상에서 표현할지 생각해보았습니다.
가장 먼저 a=v/t입니다
속도를 시간으로 나누면 가속도가 나옵니다.
 
속도의 변화량에 따라서 그 가속도의 값이 정해집니다.
한마디로 1초 동안 어떤 물체가 속도가 증가하였다고 하면
 t는 1되고v2-v1=a 라는 뜻이 됩니다.
프레임의 차이를 구할 것이니까 t를 1로 생각해도 됩니다.

그럼 이번에는 속도를 구하는 공식에 대해서 생각해봅시다. v = s/t입니다.
s는거리 t는 시간입니다.  그럼 1초동안 얼 만큼 움직인 물체의 속도는 s2 -s1= v 가 나옵니다.
이제 가속도를 표현할 식이 완성 되었습니다. a = s4 - s3 -(s3 -s2)입니다
각 각 s4-s3= v2 가되고 뒤에 는 v1이 됩니다.
그럼 위 공식을 정리하면 a = s4-2s3+s2 가 됩니다.

-kx=ma공식에 대입해보면 -ks3 = m(s4-2s3+s2) 의 공식이 나옵니다.
 k*s3 라고 한 이유는 s3를 기준점으로 잡았기 때문입니다. 
액션스크립트에 적용하기 위해서는 현재 위치에서 다음 위치의 값을 구해야 합니다.
 현재위치는 s3 이고 다음 위치는 s4입니다.
s4에 맞춰서 식을 정리하면 다음과 같이 됩니다.
s4 = (2m-k)*s3/m - s2 그럼 이제 액션스크립트에 작성하겠습니다.


m = 100; //공의 무게

k = 1;//반발계수(1이라서 단진동)

_root.ball._x = s2 = 100;//현재x좌표, 나중x좌표 100으로 초기화

this.onEnterFrame= function(){//매프레임실행하라

    var s3 = _root.ball._x;// s3 현재좌표

    _root.ball._x = (2*m-k)/m*_root.ball._x - s2;// s4 나중좌표 계산

    s2 = s3;//현재좌표로 움직임 값을 나중좌표인 s2로 반환

}

       

좌우로 잘 움직입니다. ^^

728x90

이번에는 간단한 공 튕기기에 대해서 알아보겠습니다.

여기서 알아야 할것들은 결국 좌표를 일정하게 더해주고 또 바닥면에 부딪쳤을 때 +  - 로 수정하면 됩니다.

한번 액션스크립트를 보겠습니다.

500/200 인 창에다가 ball 과 floor 란 두개의 무비 클립을 만들었습니다.

ball이란놈에게 속도를 줍시다.

위에서 아래로 떨어질때는 일정한 가속도가 더해집니다. 중력가속도라고 하죠?`ㅡ`?

만약 가속도가 0.2라고 할때 공이 움직이는 속도는 0.2 /0.4/ 0.6 이렇게 순차적으로 빨라져야 할것 입니다.

그럼 지정해주조

ball.speed = 0; // 요놈이 공의 속도를 저장할 변수입니다.
ball.gung = 0.5// 가속도를 0.5 라고 지정하죠
자그럼 ball.speed+=ball.gung;
속도를 지정해놓았습니다 안에 수치는 0.5씩 자꾸 커지겠죠?

그럼 공에 이 속도를 넣어봅시다
ball._y+=ball.speed;
다음은 평면상에 공이 닿았을때 반대방향으로 움직이게 합시다.(쉽습니다+_+생각이떠오르죵?)
나의사랑 if문
if(ball._y+ball._width/2>floor._y){
ball.speed=ball.speed*-1;
}
조건문은 공의 Y좌표(공의중간) + 공의 중간점에서 반지름 크기만큼 더해준 값이
바닥 floor 에 닿으면 -1의 값을 줌으로써 그 방향이 바뀌게 한다.
그럼 공에 닿는 순간 방향이 바뀌게 될것이고 거기에 계속해서 0.5라는 가속도값을 계속 더해줄 것이다.
ball.speed가 -값에서 다시 0이되면 멈추게되고 다시 0.5씩 더함으로 또 아래로 움직이게 됩니다.

바로 공 튕기기가 시작 된 것 입니다 + _ +

ball.speed = 0;
ball.gung=0.5;
_root.onEnterFrame = function(){
ball.speed+=ball.gung;
ball._y+=ball.speed;
if(ball._y+ball._width/2>floor._y){
ball.speed=ball.speed*-1;
//trace(ball.speed);
}
}

제가 실행한 총 소스 입니다. 아래 trace는 speed의 값의 변화를 보기 위해서 작성 했습니다.
공부하실때 보시면 좋습니다. 왜 공이 점점 튕기는 게 줄어드는지 같이 고민해봅시다+_+


-------------------------------------고민후
이유인즉 공이 바닥에 닿는 순간 -값이 되고 또 그동시에 가속도값이 더해짐으로
그 순간 속도 값만큼 차이가 나게 됩니다. 공이 떨어지는데 까지 10의 속도가 필요했으면
바닥에 닿는 순간 -10이됨과 동시에 0.5의속도가 더해짐으로 -9.5에서 다시 출반하는 거죠
이것이 반복 되다보니 0.5씩 자꾸 수치가 줄어듬으로 튕기는 높이가 줄어드는 것이죵-0-!!

다음 시간에는 - _ -b 엑스 축으로 값을 추가해줘 봅시당 - _ -오른쪽 왼쪽으로 공 튕기기 !!


728x90

게임 제작시에 탱크게임이나 간단한 슈팅게임을 제작할때 커서를 따라가는 식의 방식이 필요할때 자주쓰입니다
마우스 좌표 값을 수치로 확인하여 각도를 구합니다.

자 그럼 어떻게 움직이는 지 한번 봅시다.

_root.onEnterFrame = function() { //매프레임 마다~
ax=_xmouse - _root.angle._x;//x마우스좌표-포탄엑스좌표
ay=_ymouse - _root.angle._y;//y마우스좌표-포탄와이좌표
_root.angle._rotation=Math.atan2(ay, ax)*180/Math.PI;//각도 구하는 공식
}

아주  간단합니다^^

자 ax라는 변수에 엑스마우스 좌표 빼기 angle라는 인스턴스넴이있는 무비클립 좌표를 빼줬습니다.이유인 즉

저기 파란색 삼각형이 끝나는 지점이 마우스 입니다 회색으로 살짝 보이죠
우리가 필요한 것은 저기 파란색으로 표시되어있는 각도 값입니다.
저 각도를 알아야 포탄을 rotation 함수를 사용해서 움직이겠죠?

여기서 사용 되는 것이 Math.atan2(와이좌표, 엑스좌표) 입니다.
라디안 = Math.atan2(y좌표, x좌표) 이 함수를 사용하면 라디안 값을 출력하게 됩니다.

앞시간에 각도 값을 라디안으로 바꾸는 공식 기억하시죠? 라디안 = Math.PI/180*각도;
그럼 라디안을 각도 값으로 나오게 하겠습니다(rotation은 각도값으로 움직입니다)
라디안*180/Math.PI*라디안 = 각도;
설마 이해 안되시는 분은 없지요 그냥-_-각도 값만 놔두고 다 넘긴거에요~
자 정리하면
Math.atan2(y좌표, x좌표)*180/Math.PI = 각도;
우리가 원하는 각도 값이 나왔습니다.

그럼 다했습니다.

_root.onEnterFrame = function() { //매프레임 마다~
ax=_xmouse - _root.angle._x;//x마우스좌표-포탄엑스좌표
ay=_ymouse - _root.angle._y;//y마우스좌표-포탄와이좌표
_root.angle._rotation=Math.atan2(ay, ax)*180/Math.PI;//각도 구하는 공식
}
ax,ay는 마우스좌표와 무비클립의 거리를 구하는 것입니다~
angle이라는 무비클립에 로테이션 값을 = 우리가 구한 각도로 움직여라.

자 잘 움직이시나요~-0-? 뭐 다 아시겠지만 포탄의 중심점을 끝으로 해두셔야 포탄이 -_-
가운데에서 돌아가는 것을 방지 할수 있습니다~


728x90
게임 제작에 있어서 필요한 기본 문장에 대해서 간단하게 설명하고 지나가겠습니다.

이번에 배운 것은 Math.PI/180*Angle 이것입니다. 처음 이것을 보았을때 뭐지라고 했는데

별로 어려운 개념이 아니라 금방 잡았습니다.

Math.PI/180*pAngle 이놈이 바로 우리가 무비클립을 회전시키는데 필요한 문장입니다.

이녀석이 알려주는 것이 무엇이냐고 하면 바로 호의 길이를 나타내 주는데요 .. 그 호의 길이를

바탕으로 X축Y축 좌표값을 구해낼것입니다.

Math.PI는 우리가 알고있는 파이(3.14) 같은 것 입니다.

파이/180도 곱하기 각도 이 공식은 호도법에 의해서 나온 공식입니다.

각도를 알때 그 호의 길이를 알아내는 간단한 수학적 공식입니다.

그럼 이 호의 길이를 가지고 어떻게 회전을 시키는 지 알아 봅시다.

Angle = 60;
Radian = Math.PI/180*Angle
var X = r*Math.cos(Radian);
var Y = r*Math.sin(Radian);

자 일단 각도에 따라 회전하는 액션스크립트를 짜기 위해서는

수치에 따라서 x축 y축의 좌표변화량을 알아내야 합니다.

그러기 위해서 사용되는것이 cos, sin 입니다.

액션스크립트에서 이 문법을 사용하기 위해서는 코사인안에 호의 길이를 넣어줘야지

값을 출력하게 되어있습니다. 그래서 앞에 Math.PI/180*Angle 이 문장이 필요한 것이구요

자 x축 y축 값을 구하는데 싸인 코싸인이 왜 필요한지 궁금하신분은 위에 그림을 참조해주세요~

var X = r*Math.cos(Radian); 이것을 위에 a,b로 바꿔서 말하면 b=a*cos(세타);

요런 식이 됩니다. 당연히 b는 x축 좌표가 될것이고요 c가 y축 좌표값이 될 것입니다.

그럼 x축y축의 변화량을 구할수 있습니다. 그럼 이 두가지를 함께 설정해주면

각도에 따른 X축Y축 좌표 값을 알아 낼수 있습니다.

자 그럼 간단하게 코드를 작성해 봅시다

Angle = 60;// 각도를 지정했습니다.
r=20;// 반지름도 설정해주구요~
this.onEnterFrame = function() {//매 프레임 마다~
Angle += 10;//각도를 10씩 더해주라
Radian = Math.PI/180*Angle//각도에따라서 호의 길이를 나타내주고
var X = 60+r*Math.cos(Radian);//그 호의길이를 바탕으로 x축좌표 알아내고
var Y = 60+r*Math.sin(Radian);// y축 좌표도 알아내고
one._x = X;//좌표값을 무비클립 one 이라는 놈에게 대입시키고
one._y = Y;// 마찬가지로 y축도 대입시키고~
}

자 깔끔하게 정리 되었습니다. 화면에서 뱅글뱅글 도는 원을 보실수 있습니다^^;;

아 저기 엑스축 와이축에 60을 왜 더했는지는  아시죠 `ㅡ`?
원이 화면안에 어디쯤에서 돌아라 좌표값으로지정해준 겁니다 + _ +~


728x90

+ Recent posts