2010년 4월 2일 금요일

5. 다양한 객체 만들기 _ Duplicate (3) 충돌감지하여 객체 만들기

객체들간에 충돌을 감지하여 이미 만들어진 객체와 새로 만들어진 객체가 충돌하지 않고 새로운 객체를 계속 생성하는 것이다. 충돌감지에 대한 자세한 내용은 여기를 참고하자.

 

[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() 메서드에 대해 알아보자.

 

 

객체와 객체간의 외각 영역이 겹치거나 교차하는지 확인한다.

 

 

댓글 없음:

댓글 쓰기