태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

이번엔 폭탄을 터뜨려 보겠습니다..
우선 이번에 만들어 볼 예제를 보시죠..아래에서 빈 곳을 클릭하세요..

마구마구 누르면 아주 난리가 나죠? ㅋㅋ
이번에 알아볼 것은 객체가 아니고 FisixObject 클래스의 explode() 메소드 입니다..

explode(pos:Vector, force:Number, recursive:Boolean = true):void

예제에서 본 것처럼 해당 포인트(pos)에 힘(force)을 순간적으로 전달합니다..폭발하는거죠..
메소드 하나이니 간단하죠? 설명은 이정도만^^

수고하셨습니다..

exam_explode.zip


신고
Posted by 원강민

우선 이번에 만들어 볼 예제를 보시죠..아래에서 빈 곳을 클릭하세요..

Constraint 는 사전적으로 '제한, 속박, 부자연스러움, 뻣뻣함'을 의미합니다..
제약논리프로그래밍 (制約論理- constraint logic programming)이란 것도 있네요..

위 예제를 보시면 각 객체들을 연결하고 있는 선들 있죠? 그게 Constraint 입니다..
객체들을 서로 엮어서 함께 움직이도록 하는거죠..Poser나 After Effects 에서 피봇을 설정해 사용하는 것과 비슷하죠..

Fisix가 지원하는 Constraint는 아래와 같습니다..

AngularConstraint(pA:Particle, pB:Particle, pC:Particle, minA:Number = -1, maxA:Number = -1, breakingPoint:Number = 0)
- 3개의 파티클중 pA와 pC가 양쪽 끝이 되고 가운데 pB는 피봇 축이 됩니다..문서에는 안정적이지 못하니 이왕이면 SpringConstraint를 사용하라고 하네요..
SpringConstraint(pA:Particle, pB:Particle, tStiff:Number = 0.5, rLen:Number = -1)
- 문서에는 객체를 부드럽게 연결시킨다고 되있네요..
StickConstraint(pA:Particle, pB:Particle, rLen:Number = -1)
- 객체를 단단하게 연결합니다..

사용법은 첨부된 소스를 참고하세요..

그리고 한가지 더 있죠..총알처럼 날아가는 동그라미요..그 동그라미는 Bullet(불릿) 입니다..
Bullet(x:Number, y:Number, radius:Number = 1, autoRemove:Boolean = true)

불릿에는 shoot()이라는 메소드가 있는데요..Vector를 인자로 받아서 불릿을 쏩니다..그래서 shoot인거죠..
Vector는 방향을 가지는 값인데요..(1,0)이라고 주면 오른쪽으로 1만큼의 속도로 날아갑니다..

이상입니다..오늘도 수고하셨습니다..^^

exam_constraints.zip


신고
Posted by 원강민

이번에는 세가지를 동시에 살펴보죠..
우선 이번에 만들어 볼 예제를 보시죠..아래에서 빈 곳을 클릭하세요..

위쪽 두개를 보시면 이전에 보았던 Surface와 유사해 보입니다..그런데 이번것은 움직이고 크기도 변하죠.. 
바로 DynamicSurface 입니다..원래는 아래로 떨어지는데 제가 임의로 한 곳을 고정해 놓았습니다..
 
DynamicSurface(pA:Particle, pB:Particle, rad:Number = 0)

그리고 아래 노란줄 보이시죠? Rope라는 오브젝트 입니다.. 
Rope(startPos:Vector, endPos:Vector, segments:uint, thickness:Number = 1, stiffness:Number = 1, breakPoint:Number = 0, mass:Number = 1)

 그리고 마지막으로 클릭할 때마다 생성되는 동그란 것이 WheelParticle 입니다.. 
WheelParticle(x:Number, y:Number, r:Number)

이전에 보았던 동그라미 즉, CircleParticle 과 다른 점은 회전을 한다는 것입니다..
따라서 자동차 바퀴를 만들때는 WheelParticle을 이용해야 합니다..그래야 바퀴가 굴러가는것처럼 보이겠죠?

소스를 보시면 사용법은 아실 수 있을거에요..

수고하셨습니다^^

exam_wheelparticle.zip


신고
Posted by 원강민

이번엔 CircleParticle에 대해 알아보겠습니다..
우선 이번에 만들어 볼 예제를 보시죠..아래에서 빈곳을 클릭하세요..

지난번에 봤던 소스의 Surface는 위의 가장자리와 아래쪽 기둥들에 쓰였습니다..
Surface는 두개의 Vector와 반지름으로 만들 수 있습니다..첨부한 소스를 참고하세요..

자, 그럼 CircleParticle에 대해 알아 보겠습니다..일단 생성자를 보시죠..
CircleParticle(x:Number, y:Number, rad:Number)
x, y 위치와 반지름을 넘겨주면 동그라미가 하나 생성됩니다..

위의 예제에서는 저항들과, 클릭할때마다 생성되는 동그라미가 CircleParticle로 만들어진 것입니다..
근데 보시면 둘은 차이가 있습니다..저항은 고정되어 있고 떨어지는 동그라미는 움직입니다..

기본적으로는 움직임을 가지며 동그라미를 고정시키기 위해서는 동그라미 인스턴스의 makeStatic() 메소드를 호출하세요..
이는 CollisionObject를 상속받은 오브젝트라면 모두 가능합니다..

파티클에는 CircleParticle, GuideParticle, PolygonParticle(아직 지원되지 않습니다), WheelParticle 이 있습니다..API에서 멤버들을 확인해 보세요..

수고하셨습니다^^

exam_particle.zip


신고
Posted by 원강민

FisixEngine의 기본 설정순서는 아래와 같습니다.

1. FisixEngine 인스턴스 생성
2. 반응모드 설정(NONE: 비물리 모드, PHYSICAL: 물리 모드)
3. 중력설정
4. 렌더링 여부 설정(기본: false)
5. 렌더링 할 그래픽스 오브젝트 설정(graphics에 draw를 합니다)
6. 엔진 시동

위의 순서를 코드로 작성하면..
======================================================
var myEngine:FisixEngine = new FisixEngine();
myEngine.setReactionMode(ReactionModes.PHYSICAL);
myEngine.setGravity(0, 1 * stage.frameRate);
myEngine.setRender(true);
myEngine.setRenderGraphics(graphics);
myEngine.startEngine(30);
======================================================
또는 (위와 다른 부분은 색상으로 구분 했습니다)
======================================================

private var myEngine:FisixEngine;//함수 외부에 작성

myEngine = new FisixEngine();
myEngine.setReactionMode(ReactionModes.PHYSICAL);
myEngine.setGravity(0, 1);
myEngine.setRender(true);
myEngine.setRenderGraphics(graphics);

this.addEventListener(Event.ENTER_FRAME, on_EnterFrame);

private function on_EnterFrame(e:Event):void{//함수 외부에 작성
   myEngine.mainLoop(1);
}
======================================================

FisixEngine의 시동은 두가지 경우가 있으며 둘 다 동일하게 작동합니다.
실제 startEngine()의 경우 내부적으로는 mainLoop()를 사용합니다.
위의 설정은 Fisix 사이트의 예제에 적용되어 있는 기본값입니다. 설정치를 조금씩 바꿀때마다 속도가 바뀝니다.
참고로 기본 fps는 30입니다.

이제 위의 내용을 기본으로 물리세계를 구축하면 됩니다..
자 그럼, 만들어 볼까요? ^^

신고
Posted by 원강민

Fisix 사이트의 'Getting Started' 내용을 재구성 한 것입니다.

Fisix 엔진은 다운로드 받으셨죠? 받지 않으셨다면 아래 링크를 먼저 참조하세요.
http://airdev.tistory.com/20
==================================================================

<플렉스 빌더에서 Fisix 사용하기>
1. 플렉스 빌더 메뉴 중 File - New - ActionScript Project 를 선택합니다.
프로젝트명은 TEST로 하죠..다음버튼을 누르면 됩니다..

사용자 삽입 이미지



2. TEST 프로젝트가 만들어 졌습니다. 이제 라이브러리를 등록하겠습니다.

사용자 삽입 이미지



3. 메뉴에서 Project - Properties 를 선택합니다.

사용자 삽입 이미지



4. 아래 이미지의 번호 순서대로 선택합니다.

사용자 삽입 이미지



5. 아래 이미지의 번호 순서대로 선택합니다. FisixEngine.swc 는 다운받은 폴더의 Bin폴더내에 있습니다.

사용자 삽입 이미지



6. 라이브러리 등록이 완료 되었습니다. 위의 과정은 프로젝트를 생성할때마다 매번 해야하는 작업입니다. 잘 기억해두세요.

자, 이제 잘 되는지 테스트를 해보겠습니다. 아래 코드는 Fisix 사이트의 예제입니다.

아래 코드를 복사해서 TEST.as 파일에 내용을 지우고 붙여넣으세요. 그리고 F11을 누르면 첫번째 물리엔진 예제가 완성됩니다.

수고하셨습니다^^

==================================================================

package {
 import flash.display.Sprite;
 import com.fileitup.fisixengine.core.FisixEngine;
 import com.fileitup.fisixengine.collisions.ReactionModes;
 import com.fileitup.fisixengine.core.Vector;
 import com.fileitup.fisixengine.particles.WheelParticle;
 import com.fileitup.fisixengine.primitives.Surface;

 [SWF(width='600',height='400',backgroundColor='0xFFFFFF',frameRate='30')]
 public class TEST extends Sprite
 {
  public function TEST()
  {
   var myEngine:FisixEngine = new FisixEngine();
   myEngine.setReactionMode(ReactionModes.PHYSICAL);
   myEngine.setGravity(0, 1 * stage.frameRate)
   
   var surface1:Surface = myEngine.newSurface(new Vector(0,200),new Vector(500,350),10)
   surface1.bounce = 0.9;
   surface1.friction = 0.5;
   
   var particle1:WheelParticle = myEngine.newWheelParticle(200,100,50);
   particle1.bounce = 0.7;
   particle1.friction = 0.5;
   
   myEngine.setRender(true);
   myEngine.setRenderGraphics(graphics);
   
   myEngine.startEngine(30);
  }
 }
}
==================================================================

신고
Posted by 원강민

최근들어 물리, 3D엔진들이 일반 개발자가 쓰기 편하게 잘 정리가 되어서 나오고 있습니다..
여기서는 그 중 하나인 Fisix 엔진을 살펴보겠습니다..(정확한 단어뜻을 본적은 없지만 Physics가 아닐까 생각됩니다..)

아직 알파라서 라이브러리가 많지 않습니다..하지만 그것이 오히려 장점이 될 수 있습니다..
조금씩 조금씩 배워갈 수 있으니까요..

참고로 Fisix 엔진은 AS3.0을 기반으로 작성되었습니다..

아래는 Fisix를 위한 준비입니다..

<폴더의 구성>

☞ API 폴더 : Fisix 엔진의 API입니다..정리가 잘 되있네요..
☞ Bin 폴더 : 라이브러리가 swc파일로 들어 있습니다. (FisixEngine.swc)
☞ Examples 폴더 : 예제입니다.
☞ 기타 : 라이센스와 간단한 사용법이 있습니다.

신고
Posted by 원강민