2010년 3월 31일 수요일

5. 다양한 객체 만들기 _ Duplicate (1) 랜덤하게 위치하기

한 개의 클래스를 이용하여 다양한 객체를 만들어 생성하고 제거할 수 있다. 어떻게 하나의 클래스를 가지고 다양한 객체를 만드냐 하면 바로 복제하기를 이용하면 된다.

역시 예제를 통해 이해하는 것이 빠를것 같다. 그럼 예제를 하나 만들어보자.

 

플래시 파일을 하나 열어 하나의 무비클립을 만들고 Linkage 설정에서 class명을 Seed라고 만들자. 반복문을 통해 Seed 클래스 100개를 만들어 크기 및 알파, 필터 값을 적용하는 예제를 만들어보자.

 

[code as3]
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.filters.GlowFilter;

public class DuplicateExample extends Sprite
{
 public function DuplicateExample()
 {
  super(); // Sprite 객체 생성
  configureListener(); // 화면 및 버튼 설정
 }

 /**
  *  @private
  *  
  */
 private var seedBox:Sprite;

 /**
  *  @private
  *  화면 구성 설정
  */
 public function configureListener():void
 {
  seedBox = new Sprite(); // 화면에 붙일 패널 객체 생성
  addChild(seedBox); // 패널 화면에 표시

  redbtn_mc.addEventListener(MouseEvent.CLICK, redbtnClickHandler);
  greenbtn_mc.addEventListener(MouseEvent.CLICK, greenbtnClickHandler);
  bluebtn_mc.addEventListener(MouseEvent.CLICK, bluebtnClickHandler);
 }

 /**
  *  @private
  *  화면 초기화
  *
  *  Sprite.numChildren : 객체의 자식수를 반환  
  *  Sprite.removeChildAt() : index 위치 자식 객체 제거, 최하위 index = 0
  */
  private function removeAllChildren():void
    {
        while(seedBox.numChildren) // 패널에 객체가 없어질때까지 반복
        {
            seedBox.removeChildAt(0); // 지정된 index 위치에 있는 객체 제거
        }
    }

 /**
  *  @private
  *  기본 객체
  *
  *  Math.random() : 0 ~ 1 사이의 난수
  */
 public function redbtnClickHandler(event:MouseEvent):void
 {
  removeAllChildren(); // 화면 Clear

  for(var i:int=0; i<100; i++) // 100개 생성
  {
   var temp:MovieClip = new Seed(); // 표시할 객체 생성

   temp.x = Math.random() * stage.stageWidth; // stage 범위 안에 표시할 수 있도록 x좌표 계산
   temp.y = Math.random() * stage.stageHeight; // stage 범위 안에 표시할 수 있도록 x좌표 계산/

   seedBox.addChild(temp); // 생성한 패널에 객체 표시
  }
 }

 /**
  *  @private
  *  객체 크기 및 알파 조절
  *
  *  Math.random() : 0 ~ 1 사이의 난수
  */
 public function greenbtnClickHandler(event:MouseEvent):void
 {
  removeAllChildren(); // 화면 Clear

  for(var i:int=0; i<100; i++) // 100개 생성
  {
   var temp:MovieClip = new Seed(); // 표시할 객체 생성
   temp.x = Math.random() * stage.stageWidth; // stage 범위 안에 표시할 수 있도록 x좌표 계산
   temp.y = Math.random() * stage.stageHeight; // stage 범위 안에 표시할 수 있도록 y좌표 계산

   temp.scaleX = temp.scaleY = Math.random() * 2; // 객체의 가로, 세로 크기 계산

   temp.alpha = Math.random(); // 임의의 값 적용

   seedBox.addChild(temp); // 생성한 패널에 객체 표시
  }
 }

 /**
  *  @private
  *  객체 Glow 필터 적용
  *
  *  Math.random() : 0 ~ 1 사이의 난수
  */
 public function bluebtnClickHandler(event:MouseEvent):void
 {
  removeAllChildren(); // 화면 Clear

  for(var i:int=0; i<100; i++) // 100개 생성
  {
   var temp:MovieClip = new Seed(); // 표시할 객체 생성

   temp.x = Math.random() * stage.stageWidth; // stage 범위 안에 표시할 수 있도록 x좌표 계산
   temp.y = Math.random() * stage.stageHeight; // stage 범위 안에 표시할 수 있도록 y좌표 계산

   temp.scaleX = temp.scaleY = Math.random() * 2; // 객체의 가로, 세로 크기 계산
   temp.alpha = Math.random(); // 임의의 값 적용

   temp.filters = [ new GlowFilter() ]; // Glow 필터 적용

   seedBox.addChild(temp); // 생성한 패널에 객체 표시
  }
 }
}
}
[/code]

 

 

 

44~46 번째 라인에서 numChildren과 removeChildAt() 이라는 메서드가 나왔다.

그럼 다음번에 numChildren과 removeChildAt()에 대해 알아보자.

 

댓글 없음:

댓글 쓰기