눈송이 떨치기 둘째마당
눈송이를 액션을 이용해서 떨쳐 봅시다. 눈송이의 떨어지는 경로까지 액션으로 정의할 예정이므로 제법 난이도가 높아 집니다. 총 4단계 업그레이드가 됩니다만, 각 단계에서 그만해도 됩니다. ^^ 라이브러리창에서 복제해서 다양하게 무비클립을 만든 후에 복사해서 뿌리면 되니깐요. 각 단계에선 액션 함수를 좀 더 넣어서 혼합해 가는 과정을 보여 줍니다. 예를 들어 duplicateMovieClip 액션을 안다는 전제하에 기존의 내용을 합쳐가는 겁니다. 이 전제는 기초강좌에서 설명하는 대목입니다. 해당 강좌를 읽어서 액션을 어떻게 쓰는 지 파악하신 후에 접해 주세요.
삼각함수에서 싸인 곡선과 코싸인 곡선이 1과 -1 사이에서 일정한 경로를 눈송이의 떨어지는 경로로 만들어 봅시다.
일단 디자인을 보면, 눈송이를 그려 준 후에 무비클립으로 잡아 줍니다.
그리고 인스턴스 이름을 snow라고 줍니다.
![](https://t1.daumcdn.net/cafefile/pds97/16_cafe_2008_12_02_20_43_49351f69cd014)
이걸로 디자인은 끝납니다. ^^ 이제부터 철저히 액션만 씁니다. ㅠㅠ
플래쉬액션스크립트에선 삼각함수를 다음과 같이 씁니다.
Math.sin(); Math.cos();
()안에 숫자가 들어가면 각각의 싸인값과 코싸인값을 구할 수 있게 됩니다. 수학시간이 아닌 관계로 싸인 45도가 몇이야? 이런 질문은 안 합니다. ^^ 듣자니 포병장교들은 1도씩 다 외우고 다닌다는...
이제 숫자를 계속 넣어줄 궁리를 합시다. 쉬운 방법은 시간함수를 넣어주면 간단해 집니다. 밀리초단위로 넣을 수 있는 건 getTimer(); 함수가 있습니다.
Trace(getTimer()); 라는 액션을 써서 플래쉬를 돌려보면, 숫자가 0부터 차근차근 올라가는 걸 알 수 있습니다.
초단위로 하고 싶다면,
Mydate=new date;
Mydate.getSeconds();
이런 액션을 쓸 수 있습니다. 이건 속도에 관련된 것이므로 이 두가지 옵션을 가지고 진행해 봅시다.
삼각함수의 값에 시간함수를 넣으면,
Math.sin(getTimer()); Math.cos(Mydate.getSeconds());
이런 액션들을 생각해 볼 수 있습니다. Trace로 추적해 보면 -1에서 1 사이의 값들이 계속 호출이 됩니다.
이 값들로 눈송이의 x축 이동 즉 흔들림 또는 좌우이동을 액션으로 제어 할 수 있게 됩니다.
snow._x+=Math.sin(getTimer());
최종적으로 이 액션식이 나옵니다. 그외 cos 이나 초단위로 해서 하면 서너 액션식들을 추가로 얻을 수 있습니다.
snow._x+Math.sin(Mydate.getSeconds());
snow._x+Math.cos(Mydate.getSeconds());
snow._x+=Math.cos(getTimer());
이런 액션식들이 추가로 나옵니다. 눈송이의 경로의 풍성함을 위해서 써 봅시다.
위의 액션들은 눈송이의 x축 이동에만 관여합니다. 따라서 써서 돌려보면, 눈송이가 안 떨어지고 좌우이동만 하고 있게 됩니다. 이제 눈송이의 y축 이동을 다뤄 봅시다.
x축과는 달리 y축 이동은 간단합니다.
snow._y+=speed;
speed=##;
이외 가속도를 감안한다면,
snow._y+=(목적지 y값-snow._y)/speed;
이런 액션식을 생각할 수 있게 됩니다.
눈송이를 떨치는 경우 가속도를 감안해 버리면, 눈송이가 잘 없어지지가 않습니다. ^^ 없어지려는 찰라에 계속 미세하게만 움직이게 되어서요. 따라서 이 경우, 그냥 y축 값을 일정하게 빼가는 게 더 좋을 듯 합니다.
최종적으로 위의 액션을 눈송이 무비클립에 적용해 봅시다.
onClipEvent (enterFrame) {
this._x += Math.sin(getTimer());
this._y += speed;
speed = 3;
}