무언가 만들기 위한 지식/Action Script

무비복제 duplicateMovieClip과 attachMovie()

신럭키 2010. 4. 19. 20:30
무비 복제에는 크게 두가지가 쓰인다.

그 두가지는 제목처럼 duplicateMovieClip과 attachMovie이다.
이 둘의 공통점은 둘다 무비복제쓰인 다는 것이고 차이점은
전자는 원본 무비클립이 스테이지(같은 레벨)에 있어야 한다는 것이고 후자는 라이브러리에서 복사한다는 것이다. 이는 곧 전자는 액션스크립트까지 복사된다는 것이며 후자는 그렇지 않다는 것이다.
그리하여 전자의 경우 원본 무비클립에 특수한 효과를 주고 같은 효과를 복사하여 전체 효과를 나타내려고 할때 자주 쓰인다.

첫번째 duplicateMovieClip에 대하여 알아보자.

사용양식
duplicateMovieClip(이름:스트링, 깊이:숫자) 반환형 : 생성된 무비클립 객체
반환형은 무비클립의 참조를 반환한다.
(참조란 직접 값을 가리키는 것이 아니라  원본과 같은 곳을 가리키는 포인터와 같은 개념)
첫번째 매개변수에 새로 생성할 무비클립이름을 적고 깊이는 생성 무비클립의 depth를 설정해주는 것이다.
이때 depth는 양수로 설정해줘야하는데 그 이유는 음수일 경우 무비클립을 제거할 수 없기 때문이다. (removeMovieClip()사용시)


다음과 같이 간단한 버튼이벤트를 만들었다. 버튼을 누르면 복사하여 크기와 알파값, 위치를 랜덤으로 생성하여 올려놓는 것이다. 버튼을 누르면 다양한 원들이 나올 것이다.
원들마다 색깔이 변하는데 이는 원본인 _root.cir 무비클립에 효과를 준것이다. 아래 swf를 보면 복사된 원들이 동시에 똑같이 실행되는 것이아니라 약간 어긋나며 실행되는 것을 볼 수 있다. 이것은 복사해가며 생성하는 약간의 딜레이이다.
cir.duplicateMovieClip("cir"+k,k) 에서 생성되는 변수명은 결국 cir0, cir1, cir2....이런식으로 생성된다.
나중에 다시 생성된 원에 접근하기 위해서는 cir+k 이런식으로 다시 접근하면 된다.
객체의 이름을 이용한 접근 및 복사는 위와 같은 형식으로 자주 쓰인다.
 


버튼을 눌러보면 원들이 생성된다.

두번째 attachMovie

스테이지.attachMovie(식별자:스트링, 이름:스트링, 깊이:숫자) 반환형 : 생성된 무비클립 객체

다음에 보여지는 코드는 위와 똑같은 기능을 하는 코드이다. 차이점은 attachMovie를 사용하였고 그 함수 앞에 원본명이 붙어있는 것이 아니라 _root.가 붙어있다. 이는 복사할 스테이지를 뜻하며 첫번째 매개변수는 라이브러리에 있는 속성링크 식별자이다. 나머지는 (1)번과 같다.


아래는 라이브러리의 무비클립에서 마우스 오른쪽을 누를후 속성 부분을 클릭한 것이다.


이 부분에서 링크(L) 에서 ActionScript에 보내기를 체크하여 주고 식별자를 설정해주어야 한다.
attachMovie의 첫번째 매개변수가 바로 식별자이다.

다음은 복제를 이용하여 비슷하지만 다른 효과를 만들어 보았다.



onMouseMove이벤트를 통한 콜백함수이다. _root의 스테이지에서 마우스의 이동이 있을때마다 마우스 위치로 복사를 한다. 그리고 원본 cir의 마지막 프레임에는 this.removeMovieClip()을 추가했다. 그래야지 메모리도 덜 먹고 버벅이지 않고 부분에서 복제를 하게 된다.