무비클립 복제 3 (눈내리는효과)
무비 700x500 배경색=검정 창에 맞추고
1. 원툴선택 그려주고, 라인=none, Fill color=Gradient,로
Radialgradient(원형 그라디언트) 선택하고 색=양쪽다 흰색, 오른
쪽것만 Alpha=0, 왼쪽것은 우측으로 큰 두칸정도 이동
W=18 H=18
2. shape에 우클릭→convert→convert to movie clip, 으로 stop 체
크 해제 이름 snow로 snow선택 Script에서 Add script→Events
→Frame→onSelfEvent (enterFrame)클릭, 이것은 매 프레임마다
엔타치고 this._y=this._y+5; 입력하고 플레이 해 보면 위에서 아래
로 떨어진다 그런데 복합대입 연산자를 써서 this._y+=5; 이렇게 입
력해도 된다. 플레이 해 보면 결과는 같다
3. Scene_1선택 액션을 전담할 빈 무비클립을 하나 불러옵니다
insert→movie clip, 클릭 이름 action(액션)으로, action선택
Script에서 Add script→Events→Frame→onSelfEvent (load)하고
엔타치고 i=0;}끝에커서놓고 Add script→Events→Frame→
onSelfEvent (enterFrame)클릭 Add script→DynamicMovieClips
(다이나믹 무비클립스)→DuplicateMovieClip(..)(디플릭케이트 무
비클립)클릭 앞에 _root.snow.입력하고 ("", 1);안의 겹따옴표안에
("snow"+i, i) 이렇게 써줍니다 엔타치고 i=i+1; 입력하고 플레이를
해보니까 복제가 안되고 하나만 떨어지는데 이것은 복제가 되고
있는데 같은 장소에 떨어지기 때문에 하나처럼 보인다
onSelfEvent (load) {
i=0;
}
onSelfEvent (enterFrame) {
_root.snow.duplicateMovieClip("snow+i", i);
i=i+1;
}
4. 이것을 가로로 나열하면 보이게 되겠지요 엔타치고
_root["snow"+i]._x=-50의 -50은 양쪽으로 50씩 나가라고 그리고
+random(800)을 입력하면 앞에서 -50이 있으니까 결과적으로
750까지 움지이는 상황이 나오지요, 플레이해보니까 가로로 쭉 나
오지요? 그러면 X측만 나오니까 Y측도 나오게 엔타치고 한줄 블록
잡아 컨트롤 누르고 아래로 드래그하고
_root["snow"+i]._y=-30+random(600); 이렇게 고쳐준다 플레이
해 보면 속도도 똑같고 크기도 똑 같아서 보기싫다
5. snow선택 Script에서 this._y+=5;의 5을 3으로 바꾸고 이어서
+random(5); 이렇게써준다 이것은 무슨 뜻인가하면 모든 눈이 3픽
셀은 기본이고 3과5를 더하면 8이지요 그래서 3~8로 무작위로 떨
어 지라는 뜻 이다
onSelfEvent (enterFrame) {
this._y+=3+random(5);
}
6. 플레이 해 보면 속도는 틀리지만 크기나 투명도는 같다 그래서 맨
위의 1에, 앞에 커서놓고 엔타치고 Add script→Events→Frame→
onSelfEvent (load)하고 엔타치고 아래와 같이 쓴다
onSelfEvent (load) {
speedy=random(5);
}onSelfEvent (enterFrame) {
this._y=this._y+speedy+random(5);
}
7. 이렇게하면 속도는 다르게 잡아 줬지만 크기가 같다 그래서
action(액션) 선택 Script에서끝에커서놓고 엔타치고
_root[" "+i]._xscale=_root["snow"+i]._yscale=10+random(90);
이것은 yscale=10 이니까 기본이10 이고 random을 (90)을 줘야
100%가된다 그러니까 기본값은 10 이고 0~100까지 렌덤된다
onSelfEvent (load) {
i=0;
}
onSelfEvent (enterFrame) {
_root.snow.duplicateMovieClip("snow"+i, i);
_root["snow"+i]._x=-50+random(800);
_root["snow"+i]._y=-30+random(600);
_root["snow"+i]._xscale=_root["snow"+i]._yscale=10+random(90);
i=i+1;
}
8. 크기는 다르지만 이번에는 투명도가 없다 그리고 눈이 딱딱 끊긴
다 그래서 이번에는 snow 스크립트에서 speedy=random(5);에서
random 앞에 2+, 기본으로 2를 잡아준다 속도가 너무 느리기 때문
에 끊긴다
onSelfEvent (load) {
speedy=2+random(5);
}
onSelfEvent (enterFrame) {
this._y=this._y+speedy+random(5);
}
9. 플레이 해 보면 끊김 현상이 없다 이번에는 알파값을 조정하기
위해 action(액션) 선택 Script에서 끝에 커서놓고 엔타치고
onSelfEvent (load) {
i=0;
}
onSelfEvent (enterFrame) {
_root.snow.duplicateMovieClip("snow"+i, i);
_root["snow"+i]._x=-50+random(800);
_root["snow"+i]._y=-30+random(600);
_root["snow"+i]._xscale=_root["snow"+i]._yscale=10+random(90);
_root["snow"+i]._alpha=30+random(70);
i=i+1;
}
10. 플레이해 보니까 큰눈이나 작은 눈이나 다 같이 알파값이 같이 줘
지니까 눈이 많이 내리는 것 같지가 않다 그래서 큰눈에는 알파값
을 주지 않고 작은 눈에만 알파값을 줘보자 그래서 맨 끝의
_root["snow"+i]._alpha=30+random(70); 이파란 부분을 지우고
아래와같이 고쳐준다
onSelfEvent (load) {
i=0;
}
onSelfEvent (enterFrame) {
_root.snow.duplicateMovieClip("snow"+i, i);
_root["snow"+i]._x=-50+random(800);
_root["snow"+i]._y=-30+random(600);
_root["snow"+i]._xscale=_root["snow"+i]._yscale=10+random(90);
_root["snow"+i]._alpha=_root["snow"+i]._xscale;
i=i+1;
}
11. 플레이 해 보니까 작은눈에 알파가 들어가 있다 그런데 한가지
알아야 할 점은 알파값을 적용을 하게되면 무비 Cpu에 부하가 많
이 걸린다 그래서 무비속도가 저하될 우려가 있다 그러나 요즘은
컴퓨터가 성능이 좋아서 별 문제는 안된다 그런데
12. 눈이 위에서 아래로 일직선으로 내린다 그래서 비스듬하게 내리
게 한다 이번에는 snow에 speed에 y값을 넣었는 이번에는
speed에 x값을 넣습니다
onSelfEvent (load) {
speedy=2+random(3);
speedx=-2+random(5);
}
onSelfEvent (enterFrame) {
this._y=this._y+speedy+random(5);
this._x=this._x+speedx;
}
13. 이렇게 고쳐주고 플레이 해 봤더니 눈이 이리저리로 내립니다
바람에 흔들리는 것 처럼 내린다
14. 그런데 조금더 자연스럽게 하기위해 효과를 하나 줘 보겠어요
snow열고 안의 쉐입선택 30프레임에 더블클릭 스테지의 눈 클릭
방향키로 우측으로 10번, 60프레임에 더블클릭 방향키로 좌측으로
10번, 하고 플레이 해 보니까 움직임이 자연 스럽다 그런데 스테지
밖으로 계속 내린다
15. 중요, 스테지 안에만 눈이 내리게 할려면 +로된 snow 선택 끝에
엔타치고 if(this._y>510)줄 써주고 Add script→
DynamicMovieClips (다이나믹 무비클립스)
→Re movie MovieClip(..)(리무브 무비클립)클릭 하고 앞에 this 써
줍니다, Re movie MovieClip(..)은 사라지게 합니다
이걸 안해주면 실행하고 좀 지나면 컴퓨터가 다운 된다, 아주 중요
함
onSelfEvent (load) {
speedy=2+random(3);
speedx=-2+random(5);
}
onSelfEvent (enterFrame) {
this._y=this._y+speedy+random(5);
this._x=this._x+speedx;
if(this._y>510){
this.removeMovieClip();
}
}
script7,8강.swi
script7,8,9강.swi