무언가 만들기 위한 지식/Action Script
Movie duplicate(무비복제)
신럭키
2010. 2. 24. 02:17
무비복제에는 두가지 방법이 있습니다.
duplicateMovieClip()을 이용하는 것과 attachMovie()를 이용하는 것입니다.
전자는 스테이지에 있는 무비를 복제하는 것이고 후자는 라이브러리에 있는 무비를 복제합니다.
후자의 경우 라이브러리의 심볼에 따로 링크설정을 해주어야 하기 때문에 저같은 경우 전자를 선호합니다^^
이것도 두가지 방법이 있다.
(1) 전역함수로 사용
duplicateMovieClip(target, new name, depth);
ex) duplicateMovieClip("asdf","asdf_1",2);
target : 복제할 대상
new name : 복제된 내용의 무비인스턴스네임
depth : 깊이, 층설정
(2)메소드 사용방식
asdf.duplicateMovieClip(new name, depth);
ex) duplicateMovieClip("asdf_1", 2);
new name : 복제된 내용의 무비인스턴스네임
depth : 깊이, 층설정
※하나의 층에는 하나의 무비클립 인스턴스만 놓일수 있으므로 복제된 무비클립 인스턴스마다 고유한 층에 놓이도록 층 번호가 중복되지 말아야 한다.
보통 자주 쓰이는 양식은 for문을 이용하여 변수로 복제된 네임에 + 숫자 하여 이름변화주고 순차적으로 depth의 깊이를 늘려주는 형식을 이용한다. 자세한건 아래쪽에...
그리고 복사할때 스크립트 내용까지 같이 복사된다는 점을 기억해주세요
사용되는 예를 볼까요.
for(var i=0;i<100;i++) //100번 반복
{
asdf.duplicateMovieClip("asdf"+i, i); // asdf라는 무비를 복사하여 asdf0,asdf1,asdf2~~ 이런식으로 계속 복사하고 층은 0, 1, 2 이런식으로 늘어납니다.
this["asdf"+i]._x=Math.ceil(Math.random()*100); //생성된 무비의 위치를 랜덤하게 정해줍니다.
this["asdf"+i]._y=Math.ceil(Math.random()*100);
}
//위 내용은 asdf를 복제하여 (100,100)안의 공간에 랜덤하게 100개의 asdf를 생성합니다.
//asdf무비 자체에 코드를 작성하여 생성되는 무비마다 다른 효과를 줄 수 있습니다.
Math에 대해서는 후에 자세히 설명하도록 하죠. ceil은 올림효과이고 random()은 0과 1사이의 무작위 수를 리턴합니다.
일단 라이브러리에 있는 심볼을 이용하기 위해서는 연결설정을 해주어야 한다.(Linkage)
먼저 라이브러리에서 심볼에 마우스 우클릭후 연결(linkage)를 누른다.
그후 Export for Action Script 체크 그후 Identifier에 이름설정. 끝.... 3가지만 하면됨.
Movie.attachMovie(LinkageName, NewName, Depth);
ex) asdf.attachMovie("zxcv","zxcv1",1);
Movie : 복사한 무비를 위치시킬 장소
LinkageName : 복사할 라이브러리 심볼의 이름 (전에 설정했던 Identifier의 이름이다.)
NewName : 새로 복제하여 생성된 무비클립 인스턴스 네임
Depth : 층, 깊이. 숫자가 높을수록 위에 위치
이것도 사용예를 보도록 하죠.
depth=0; //for문이 두개 들어가기때문에 for문 자체 변수로 깊이조절못하기 까다로우므로 따로 변수지정
for(var m=0;m<=10;m++)
{
for(var n=0;n<=10;n++)
{
mc=this.attachMovie("Tile","Tile"+depth,depth++);
//무비를 복제하여 mc란곳에 저장. 편한 무비속성 접근을 위함. depth를 ++함
mc._x=n*30;
mc._y=m*30; //생성된 무비의 x,y 좌표값과 투명도 조절
mc._alpha=m*n;
}
} //결국 그라이데이션 효과를 지닌 300*300평면이 나타난다.
위에서 첫번째 방법과 두번째 방법은 같은 것임에도 소스가 약간 다른데 그것은 복제된 무비클립속성 참조하는 방법에 따라 다른 것이다. 클립속성 참조는 다음글에서 확인해 보자.
duplicateMovieClip()이나 attachMovie로 복제된 무비클립 인스턴스를 제거할때는
removeMovieClip()을 사용한다.
ex) asdf.removeMovieClip();
asdf는 삭제할 대상 무비클립 인스턴스의 이름이다.
삭제를 하거나 _visible=0으로 보이지 않게 하거나 swapdepth로 값을 바꿔주는 3가지 방식을 주로 사용한다. 저의 같은 경우 또 쓰일일이 있을지도 모름으로 가능한 _visible이나 swapdepth를 이용합니다.
duplicateMovieClip()을 이용하는 것과 attachMovie()를 이용하는 것입니다.
전자는 스테이지에 있는 무비를 복제하는 것이고 후자는 라이브러리에 있는 무비를 복제합니다.
후자의 경우 라이브러리의 심볼에 따로 링크설정을 해주어야 하기 때문에 저같은 경우 전자를 선호합니다^^
1. duplicateMovieClip()을 이용한 무비클립 복제
이것도 두가지 방법이 있다.
(1) 전역함수로 사용
duplicateMovieClip(target, new name, depth);
ex) duplicateMovieClip("asdf","asdf_1",2);
target : 복제할 대상
new name : 복제된 내용의 무비인스턴스네임
depth : 깊이, 층설정
(2)메소드 사용방식
asdf.duplicateMovieClip(new name, depth);
ex) duplicateMovieClip("asdf_1", 2);
new name : 복제된 내용의 무비인스턴스네임
depth : 깊이, 층설정
※하나의 층에는 하나의 무비클립 인스턴스만 놓일수 있으므로 복제된 무비클립 인스턴스마다 고유한 층에 놓이도록 층 번호가 중복되지 말아야 한다.
보통 자주 쓰이는 양식은 for문을 이용하여 변수로 복제된 네임에 + 숫자 하여 이름변화주고 순차적으로 depth의 깊이를 늘려주는 형식을 이용한다. 자세한건 아래쪽에...
그리고 복사할때 스크립트 내용까지 같이 복사된다는 점을 기억해주세요
사용되는 예를 볼까요.
for(var i=0;i<100;i++) //100번 반복
{
asdf.duplicateMovieClip("asdf"+i, i); // asdf라는 무비를 복사하여 asdf0,asdf1,asdf2~~ 이런식으로 계속 복사하고 층은 0, 1, 2 이런식으로 늘어납니다.
this["asdf"+i]._x=Math.ceil(Math.random()*100); //생성된 무비의 위치를 랜덤하게 정해줍니다.
this["asdf"+i]._y=Math.ceil(Math.random()*100);
}
//위 내용은 asdf를 복제하여 (100,100)안의 공간에 랜덤하게 100개의 asdf를 생성합니다.
//asdf무비 자체에 코드를 작성하여 생성되는 무비마다 다른 효과를 줄 수 있습니다.
Math에 대해서는 후에 자세히 설명하도록 하죠. ceil은 올림효과이고 random()은 0과 1사이의 무작위 수를 리턴합니다.
2. attachMovie()을 이용한 무비클립 복제
일단 라이브러리에 있는 심볼을 이용하기 위해서는 연결설정을 해주어야 한다.(Linkage)
먼저 라이브러리에서 심볼에 마우스 우클릭후 연결(linkage)를 누른다.
그후 Export for Action Script 체크 그후 Identifier에 이름설정. 끝.... 3가지만 하면됨.
Movie.attachMovie(LinkageName, NewName, Depth);
ex) asdf.attachMovie("zxcv","zxcv1",1);
Movie : 복사한 무비를 위치시킬 장소
LinkageName : 복사할 라이브러리 심볼의 이름 (전에 설정했던 Identifier의 이름이다.)
NewName : 새로 복제하여 생성된 무비클립 인스턴스 네임
Depth : 층, 깊이. 숫자가 높을수록 위에 위치
이것도 사용예를 보도록 하죠.
depth=0; //for문이 두개 들어가기때문에 for문 자체 변수로 깊이조절못하기 까다로우므로 따로 변수지정
for(var m=0;m<=10;m++)
{
for(var n=0;n<=10;n++)
{
mc=this.attachMovie("Tile","Tile"+depth,depth++);
//무비를 복제하여 mc란곳에 저장. 편한 무비속성 접근을 위함. depth를 ++함
mc._x=n*30;
mc._y=m*30; //생성된 무비의 x,y 좌표값과 투명도 조절
mc._alpha=m*n;
}
} //결국 그라이데이션 효과를 지닌 300*300평면이 나타난다.
위에서 첫번째 방법과 두번째 방법은 같은 것임에도 소스가 약간 다른데 그것은 복제된 무비클립속성 참조하는 방법에 따라 다른 것이다. 클립속성 참조는 다음글에서 확인해 보자.
※ 복제된 무비클립 제거
duplicateMovieClip()이나 attachMovie로 복제된 무비클립 인스턴스를 제거할때는
removeMovieClip()을 사용한다.
ex) asdf.removeMovieClip();
asdf는 삭제할 대상 무비클립 인스턴스의 이름이다.
삭제를 하거나 _visible=0으로 보이지 않게 하거나 swapdepth로 값을 바꿔주는 3가지 방식을 주로 사용한다. 저의 같은 경우 또 쓰일일이 있을지도 모름으로 가능한 _visible이나 swapdepth를 이용합니다.