일정한 간격을 갖는 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.. 이것은 다음번에 자세히 알아보도록 하자.
댓글 없음:
댓글 쓰기