레이블이 Sprite인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Sprite인 게시물을 표시합니다. 모든 게시물 표시

2010년 4월 1일 목요일

5. 다양한 객체 만들기 _ Duplicate (2) 일정한 패턴으로 위치하기

일정한 간격을 갖는 GRID(격자) 객체에 다양한 스타일을 적용한 예제를 한번 만들어보자.

 

이번 예제에서는 버튼을 무비클립을 만들어서 사용하는 것이 아니라 Graphics 클래스를 이용하여 직접 만들어보겠다. 그 전에 Graphics 클래스가 어떤 기능을 하는 클래스인지 알아봐야겠다. Graphics 클래스는 여기를 참조하자.

 

[code as3]
package
{
import flash.display.Graphics;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.IEventDispatcher;
import flash.geom.ColorTransform;

public class Main extends Sprite
{
 public function Main()
 {
  super(); // Sprite 클래스 생성

  stage.scaleMode = "noScale"; // 플레이어 크기와 상관없이 화면 내용 고정
  stage.align = "TL"; // stage 정렬 : Top, Left

  seedBox = new Sprite(); // 화면 Container 생성

  seedBox.x = 50;

  addChild(seedBox); // 화면에 표시

  createButtons(); // 버튼 만들기
 }

 /**
  *  @private
  *  컨테이너
  */
 private var seedBox:Sprite;

 /**
  *  @private
  *  빨간 버튼 : Grid(격자) 패턴
  */
 private var normal_Red_btn:Sprite;

 /**
  *  @private
  *  초록 버튼 : 알파 적용
  */
 private var alpha_green_btn:Sprite;

 /**
  *  @private
  *  파란 버튼 : 색상 적용
  */
 private var color_blue_btn:Sprite;

 /**
  *  @private
  *  노란 버튼 : 스케일 적용
  */
 private var scale_yellow_btn:Sprite;

 /**
  *  @private
  *  버튼 사이 간격
  */
 private var gap:Number = 30;

 /**
  *  @private
  *  객체 행 수
  */
 private var row:int = 8;

 /**
  *  @private
  *  객체 열 수
  */
 private var column:int = 10;

 /**
  *  @private
  *   객체 총 수
  */
 private var total:int = row * column;

 /**
  *  @private
  *  버튼 만들기
  */
 private function createButtons():void
 {
  var g:Graphics;

  if(!normal_Red_btn) // 빨간 버튼
  {
   normal_Red_btn = new Sprite(); // 빨간 버튼 객체 생성
   g = normal_Red_btn.graphics; // 빨간 버튼을 그릴 수 있도록 지정

   g.clear(); // 그린 그래픽 지움
   g.lineStyle(1, 0x000000, 1); // 빨간 라인 그리기
   g.beginFill(0xFF0000, 1); // 라인 안에 빨간색으로 채우기 시작
   g.drawRect(0, 0, 20, 20);
   g.endFill(); // 빨간색 채움

   normal_Red_btn.x = 10; // 빨간 버튼 x값 위치 설정
   normal_Red_btn.y = 10; // 빨간 버튼 y값 위치 설정

   normal_Red_btn.buttonMode = true; // 버튼 위 마우스 오버시 손모양으로 바뀜

   addChild(normal_Red_btn); // 버튼 화면에 표시
   
   configureListener(normal_Red_btn); // 빨간 버튼 설정
  }

  if(!alpha_green_btn) // 초록 버튼
  {
   alpha_green_btn = new Sprite(); // 초록 버튼 객체 생성
   
   g = alpha_green_btn.graphics; // 초록 버튼을 그릴 수 있도록 지정

   g.clear(); // 그린 그래픽 지움
   g.lineStyle(1, 0x000000, 1); // 초록 라인 그리기
   g.beginFill(0xCBFF00, 1); // 라인 안에 초록색으로 채우기 시작
   g.drawRect(0, 0, 20, 20);
   g.endFill(); // 초록색 채움

   alpha_green_btn.x = normal_Red_btn.x + gap ; // 빨간 버튼 옆에 위치
   alpha_green_btn.y = 10; // 초록 버튼 y값 위치 설정
   alpha_green_btn.buttonMode = true; // 버튼 위 마우스 오버시 손모양으로 바뀜

   addChild(alpha_green_btn); // 버튼 화면에 표시

   configureListener(alpha_green_btn); // 초록 버튼 설정
  }

  if(!color_blue_btn) // 파란 버튼
  {
   color_blue_btn = new Sprite(); // 파란 버튼 객체 생성
   g = color_blue_btn.graphics; // 파란 버튼을 그릴 수 있도록 지정

   g.clear(); // 그린 그래픽 지움
   g.lineStyle(1, 0x000000, 1); // 파란 라인 그리기
   g.beginFill(0x0000FF, 1); // 라인 안에 파란색으로 채우기 시작
   g.drawRect(0, 0, 20, 20);
   g.endFill(); // 파란색 채움

   color_blue_btn.x = 10; // 파란 버튼 x값 위치 설정
   color_blue_btn.y = normal_Red_btn.y + gap; // 빨간 버튼 아래 위치
   color_blue_btn.buttonMode = true; // 버튼 위 마우스 오버시 손모양으로 바뀜

   addChild(color_blue_btn); // 버튼 화면에 표시
 
   configureListener(color_blue_btn); // 파란 버튼 설정
  }

  if(!scale_yellow_btn) // 노란 버튼
  {
   scale_yellow_btn = new Sprite(); // 노란 버튼 객체 생성

   g = scale_yellow_btn.graphics; // 노란 버튼을 그릴 수 있도록 지정

   g.clear(); // 그린 그래픽 지움
   g.lineStyle(1, 0x000000, 1); // 노란 라인 그리기
   g.beginFill(0xFFFF00, 1); // 라인 안에 노란색으로 채우기 시작
   g.drawRect(0, 0, 20, 20);
   g.endFill(); // 노란색 채움

   scale_yellow_btn.x = color_blue_btn.x + gap; // 파란 버튼 옆에 위치
   scale_yellow_btn.y = alpha_green_btn.y + gap; // 초록 버튼 아래 위치
   scale_yellow_btn.buttonMode = true; // 버튼 위 마우스 오버시 손모양으로 바뀜
   addChild(scale_yellow_btn); // 버튼 화면에 표시
   configureListener(scale_yellow_btn); // 노란 버튼 설정
  }
 }

 /**
  *  @private
  *  버튼 설정
  *  
  *  @param  dispatcher  선택된 버튼
  */
 private function configureListener(dispatcher:IEventDispatcher):void
 {
  dispatcher.addEventListener(MouseEvent.CLICK, buttonClickHandler); // 버튼 이벤트 등록
 }
 /**
  *  @private
  *  화면 초기화
  *
  *  Sprite.numChildren : 객체의 자식수를 반환,  index = 1
  *  Sprite.removeChildAt() : index 위치 자식 객체 제거, index = 0
  */
  private function removeAllChildren():void
 {
  while(seedBox.numChildren) // 컨테이너에 객체가 없어질때까지 반복
  {
   seedBox.removeChildAt(0); // 지정된 index 위치에 있는 객체 제거
  }
 }

 /**
  *  @private
  *  격자 패턴
  *
  *  Math.floor : 내림 메서드 - 한 행이 채워지면 자동으로 줄바꿈
  */
 private function createNormal():void
 {
  removeAllChildren();

  for(var i:int=0; i<total; i++) // 0 ~ total 만큼 반복
  {
   var temp:MovieClip = new Seed(); // 객체 생성

   temp.x = (i%column) * 40 + gap; // 가로 위치 x값 계산 : 간격 30
   temp.y = Math.floor(i/column) * 40 + gap; // 세로 위치 y값 계산 : 간격 30
   
   seedBox.addChild(temp); // 화면에 표시
  }
 }

 /**
  *  @private
  *  알파 적용
  */
 private function createAlpha():void
 {
  removeAllChildren();

  for(var i:int=0; i<total; i++) // 0 ~ total 만큼 반복
  {
   var temp:MovieClip = new Seed(); // 객체 생성

   temp.x = (i%column) * 40 + gap; // 가로 위치 x값 계산 : 간격 30
   temp.y = Math.floor(i/column) * 40 + gap; // 세로 위치 y값 계산 : 간격 30
   
   temp.alpha = i / total; //  알파값 범위 : 0 ~ 1

   seedBox.addChild(temp); // 화면에 표시
  }
 }

 /**
  *  @private
  *  색상 적용 : 랜덤
  */
 private function createColor():void
 {
  removeAllChildren();

  for(var i:int=0; i<total; i++) // 0 ~ total 만큼 반복
  {
   var temp:MovieClip = new Seed(); // 객체 생성

   temp.x = (i%column) * 40 + gap; // 가로 위치 x값 계산 : 간격 30
   temp.y = Math.floor(i/column) * 40 + gap; // 세로 위치 y값 계산 : 간격 30

   var ct:ColorTransform = new ColorTransform(); // 색상 조절 객체 생성

   ct.color = Math.random() * 0xFFFFFF; // 임의의 색상 선택

   temp.transform.colorTransform = ct; // 선택된 임의의 색상 적용

   seedBox.addChild(temp); // 화면에 표시
  }
 }

 /**
  *  @private
  *  스케일 적용
  */
 private function createScale():void
 {
  removeAllChildren();

  for(var i:int=0; i<total; i++) // 0 ~ total 만큼 반복
  {
   var temp:MovieClip = new Seed(); // 객체 생성

   temp.x = (i%column) * 40 + gap; // 가로 위치 x값 계산 : 간격 30
   temp.y = Math.floor(i/column) * 40 + gap; // 세로 위치 y값 계산 : 간격 30

   temp.scaleX = temp.scaleY = i / total; // 객체의 가로, 세로 크기 계산

   seedBox.addChild(temp); // 화면에 표시
  }
 }

 /**
  *  @private
  *  버튼 선택
  */
 private function buttonClickHandler(event:MouseEvent):void
 {
  switch(event.target) // 현재 선택한 버튼
  {
   case normal_Red_btn :
    createNormal(); // 격자패턴 메서드 호출
    break;

   case alpha_green_btn :
    createAlpha(); // 알파 적용 메서드 호출
    break;

   case color_blue_btn :
    createColor(); // 색상 적용 메서드 호출
    break;

   case scale_yellow_btn :
    createScale(); // 스케일 적용 메서드 호출
    break;
  }
 }
}
}
[/code]

 

 

 

 

위의 코드에서 보면 graphics, buttonMode, clear, lineStyle, beginFill, drawRect, endFill, IEventDispatcher,ColorTransform 이런 것들이 나온다. 이것들이 도대체 뭘까?

 

:: Sprite 클래스와 관련된 속성과 메서드

 

- graphics, buttonMode 는 여기를 참조하자.

 

:: Graphics 클래스와 관련된 속성과 메서드

 

-  lineStyle, beginFill, drawRect, endFill, 는 여기를 참조하자.

 

:: ColorTransform 클래스여기를 참조하자.

 

음...마지막으로 IEventDispatcher.. 이것은 다음번에 자세히 알아보도록 하자.

2010년 3월 22일 월요일

4.Sprite 클래스

Sprite 클래스

 

Sprite 클래스는 MovieClip 클래스의 기능을 대체하는 클래스로 타임라인이 필요 없는 객체에 적합한 기본 클래스이다. Sprite는 일반적으로 타임라인을 사용하지 않는 사용자 인터페이스(UI) 구성요소에 대한 논리 기본 클래스가 된다.

 

 

   

     참조 : www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

 

Sprite 클래스에 대해서도 간다히 알아봤으니, 이제 속성과 메서드를 알아보자.

 

 속성


 buttonMode : Boolean  버튼 모드
 dropTarget : DisplayObject

[read-only]

 드래그하는 Sprite 아래 

 의 표시 객체 또는

 Sprite를 드래그해 놓은

 표시 객체를 지정.

 graphics : Graphics

[read-olny]

 벡터 드로잉 명령을 내

 릴 수 있는 이 Sprite에 

 속한 Graphics 객체를

 지정.

 hitArea : Sprite  Sprite의 히트 영역으로

 사용할 다른 Sprite를

 지정.

 soundTransform : 

 SoundTransform

 Sprite 내에서 사운드를

 제어.

 useHandCursor :

 Boolean

 buttonMode 속성이

 true로 설정된 Sprite 위

 로 마우스를 움직일 때

 손 모양(손 모양 커서)을

 표시할지 여부를 나타내

 는 부울 값.


메서드

 

 Sprite()  Sprite 객체 생성

 startDrag

(lockCenter:Boolean = false, bounds:Rectangle = null):void

 지정된 Sprite를 드래그

 할 수 있도록 함.

 stopDrag():void  starDrag() 메서드 종료.

Sprite 클래스에는 위와 같은 속성과 메서드들이 있다. 이제 이것을 이용하여 예제를 만들어 보자.