객체들간에 충돌을 감지하여 이미 만들어진 객체와 새로 만들어진 객체가 충돌하지 않고 새로운 객체를 계속 생성하는 것이다. 충돌감지에 대한 자세한 내용은 여기를 참고하자.
[code as3]
package
{
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.Event;
import flash.filters.GlowFilter;
public class Main extends Sprite
{
public function Main()
{
super(); // Sprite 객체 생성
stage.frameRate = 40; // 프레임 속도 40으로 설정
stage.addEventListener(Event.ENTER_FRAME, createParticleHandler); // 프레임마다 이벤트 등록
}
/**
* @private
* 객체 참조 저장 배열
*/
private var holder:Array = new Array();
/**
* @private
* box 객체
*/
private var box:Sprite;
/**
* @private
* 객체 배치
*
* scaleX : scaleY 객체의 가로, 세로 크기 (백분율) 1.0 = 100%
*/
private function createParticleHandler(event:Event):void
{
box = new Box(); // 객체 생성
box.x = Math.random() * stage.stageWidth; // stage 범위 안에 표시할 수 있도록 x좌표 계산
box.y = Math.random() * stage.stageHeight; // stage 범위 안에 표시할 수 있도록 y좌표 계산
box.scaleX = box.scaleY = Math.random() * 1; // 객체를 임의의 크기로 계산
holder.push(box); // box 객체 배열에 추가
if(isOk(box)) // isOk() 함수 호출
{
addChild(box); // box 화면 표시
var glow:GlowFilter = new GlowFilter(); // GlowFilter 적용
glow.color = Math.random() * 0xFFFFFF; // 임의의 색상 적용
box.filters = [glow];
}
else
{
holder.pop(); // 배열에서 객체 삭제
}
}
/**
* @private
* 충돌 감지
*
* @param mc box객체
*/
private function isOk(mc:Sprite):Boolean
{
for(var i=0; i<holder.length-1; i++) // holder 배열 있는 수 만큼
{
var flag:Boolean = holder[i].hitTestObject(mc); // 배열에 저장된 객체와 현재 객체 충돌 비교
if(flag) // 충돌되면
{
return false; // false 반환
break;
}
}
return true; // 충돌되지 않으면 마지막에 true 반환
}
}
}
[/code]
위의 코드에서 나오는 여러가지 클래스의 속성, 메서드에 대해서 간단하게 알아보자.
Stage 클래스
Stage는 Flash 화면에 보이는 전체 영역을 말한다. 그럼 Stage 클래스의 framRate의 속성에 대해알아보자.

stage의 프레임 속도를 설정하나다. 프레임 속도는 fps(frame per second)로 정의된다.
기본적으로 첫번째 SWF 파일의 프레임 속도가 기본 프레임 속도로 설정된다. 프레임 속도의 유효범위는 0.01 ~ 1000 이다.
Array 클래스
배열에 접근하거나 조정할 수 있다. 인덴스는 0 부터이다. 첫번째 요소는 [0] 이다.

push()
배열 끝에 하나 또는 그 이상의 요소를 추가하고 , 추가한 새로운 배열의 길이를 반환한다.

pop()
배열의 마지막 요소를 제거하고, 배열의 요소의 값을 반환한다.

GlowFilter 클래스
객체에 광선 효과를 적용할 수 있는 클래스이다.

DisplayObject 클래스
DisplayObject 클래스의 hitTestObject() 메서드에 대해 알아보자.
객체와 객체간의 외각 영역이 겹치거나 교차하는지 확인한다.

댓글 없음:
댓글 쓰기