2.0에서 무비클립을 만들어 복제하고자 했을 때 이런식으로
[code as3]
_root.attachMovie( "Box", "mc", 0 );
_root.createEmptyMovieClip( "mc", 0 );
Box.duplicateMovieClip( "mc", 0 );
[/code]
빈 무비클립을 만들어 복제하는 형태였다면,
3.0에서의 복제는 new를 사용해 만들기만 하면 된다.
[code as3]
var mc:Box = new Box();
var mc:MovieClip = new MovieClip();
[/code]
예제를 보면 이렇다.
for문을 이용해 Seed클래스를 100번 실행하여 만든다.
[code as3]
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.filters.GlowFilter;
public class Duplicate extends Sprite
{
public function Duplicate()
{
super();
seedBox = new Sprite();
addChild( seedBox );
buttonMode = true;
config();
}
private var seedBox:Sprite;
private var seedNum:Number = 100;
private function config() : void
{
normalBtn.addEventListener( MouseEvent.CLICK, btnClickHandler );
alphaBtn.addEventListener( MouseEvent.CLICK, btnClickHandler );
glowBtn.addEventListener( MouseEvent.CLICK, btnClickHandler );
setChildIndex( seedBox, 0 );
}
private function btnClickHandler( e:MouseEvent ) : void
{
switch( e.target )
{
case normalBtn :
createNormal();
break;
case alphaBtn :
createAlpha();
break;
case glowBtn :
createGlow();
break;
}
}
private function removeAllChild() : void
{
while( seedBox.numChildren )
{
seedBox.removeChildAt(0);
}
}
private function createNormal() : void
{
removeAllChild();
var i:int = 0;
for( i = 0; i < seedNum; i++ )
{
var temp:Sprite = new Seed();
temp.x = Math.random() * stage.stageWidth;
temp.y = Math.random() * stage.stageHeight;
seedBox.addChild( temp );
}
}
private function createAlpha() : void
{
removeAllChild();
var i:int = 0;
for( i = 0; i < seedNum; i++ )
{
var temp:Sprite = new Seed();
temp.x = Math.random() * stage.stageWidth;
temp.y = Math.random() * stage.stageHeight;
temp.scaleX = temp.scaleY = Math.random() * 2;
temp.alpha = Math.random();
seedBox.addChild( temp );
}
}
private function createGlow() : void
{
removeAllChild();
var i:int = 0;
for( i = 0; i < seedNum; i++ )
{
var temp:Sprite = new Seed();
temp.x = Math.random() * stage.stageWidth;
temp.y = Math.random() * stage.stageHeight;
temp.scaleX = temp.scaleY = Math.random() * 2;
temp.alpha = Math.random();
temp.filters = [ new GlowFilter() ];
seedBox.addChild( temp );
}
}
}
}
[/code]
-> 버튼 세개는 stage에 무비클립으로 미리 만들어 주었고, 동그라미 모양의 무비클립은 Seed라는 클래스를
Sprite클래스를 확장한 형태로 Linkage를 주었다. 모션이 없으므로 가볍게 하기 위해 역시 Sprite로 하였
다. 버튼을 누를 때마다 100개의 seed가 만들어 지면서 상황에 따라 알파값이 들어가거나 크기가 랜덤하
게 찍히거나 혹은 glow 값을 넣어주었다.
여기서 glow값을 쓰기 위해서 GlowFilter를 import 해주었다. glow는 우리가 흔히 포토샵에서 사용하게
되는 테두리를 변형해주는 ↓

Blendong툴인데 이것을 액션스크립트로도 적용할 수가 있다는 것이다.
액션스크립트에서 GlowFilter() 생성자를 보면 이렇다.

소스에서 처럼 아무것도 지정해주지 않았을 때 기본값으로 빨간색이 나오게 되는 것이다. 나머지 값들도
지정해주는 것에 따른 효과를 볼 수 있게 된다.
32번째줄에 보면 setChildIndex(child:DisplayObject, index:int)메소드를 써준 이유
는 seedBox에서 생성되는 100개의 seed들이 stage에 올려놓은 버튼을 가려서 생성되기 때문에 간혹 버
튼을 가려 버튼의 역할을 못하게 막는 경우가 있어서 쉽게말해 seedBox의 depth를 0으로 준 것이다. 그럼
맨 밑으로 가게 되어 버튼 세개가 위로 올라오게 된다.
표시 객체가 여러 개일 경우 지정해준 인덱스에 대해서만 바뀌게 되고 나머지는 그대로이다.
예를 들어,
[code as3]
setChildIndex( getChildAt(1), 0 );
[/code]
이렇게 해주면 밑에 그림처럼 인덱스가 바뀌게 된다.
![]() | ![]() |


댓글 없음:
댓글 쓰기