[AS3] APE : CollisionCircleParticle

Programming/Physics Engine 2007. 8. 18. 06:37
APE의 RectangleParticle 클래스를 이용해서 파티클을 생성하고 등록할 경우에는 자체 rotation (angle) 표현을 하지 못한다. 이는 CircleParticle의 경우도 같다. 하지만 CircleParticle을 상속하고 있는 WheelParticle의 경우에는 자체 angle값을 가지고 있어서 마찰과 각도에 따라서 자체 회전을 하게 된다. 아래 실험한 오브젝트의 경우도 WheelParticle을 통해서 생성한 오브젝트들이기 때문에 회전이 가능하다.

화면에서 마우스를 down한 상태에서 시간의 흐름에 따라 원형의 크기가 커지는데 Max 값은 반지름 80으로 한정하였다. 생성한 오브젝트를 MouseDown and Drag하면 힘의 방향을 바꿀 수 있으며 MouseUp을 하게 되면 마우스 포인트와의 SpringConstraint를 removeConstraint를 실행하여 연결을 끊어 주었다. 이러한 형태는 앙드레 미쉘이 만들고 있는 Revive의 엔진 자체에 있는 마우스 이벤트와 비슷하지만 구현 방법은 아마 다를 듯싶다.

오브젝트가 없는 화면에서 위에서 생성한 방법으로 생성할 수 있는 오브젝트의 개수는 10개로 한정하였다. 생성한 모든 오브젝트들은 서로 collision이 가능하다.(외벽 또한 그러함) 8개로 오브젝트를 한정한 이유는 오브젝트가 많으면 지누 컴이 뻑난다.(쿠쿠)

이러한 형태를 어디에 쓸 수 있을 지는 생각해 봐야겠다. 원래 이런 형태로 테스트 하려고 했던 것은 아니었는데 하다 보니…

원래 하려고 했던 것은 위에서 언급했던 것과 같이 RectangleParticle의 경우 자체 angle이 지원되지 않아서 중력에 의해서 외부의 충격을 받았을 때 WheelParticle처럼 회전을 하지 못한다는 것을 고민하다가 APE 제작자 alec cove와 APE를 사용하는 kiosk(키오스크 작업을 하는지 이름이 그러한지 모르겠다.) 와의 대화를 보고 알게 되었다. 방법은 아래와 같다.

4면에 대한 충돌과 각도에 따라 회전이 가능한 사각형의 오브젝트를 만들 때는 4점이 되는 모서리 부분에 CircleParticle을 생성하고 그 모서리의 외각선을 따라 각각 4개의 SpringConstraint로 연결해 준다. 이렇게만 하면 4점이 모두 연결 되었으나 외각선에 따라 연결되었기 때문에 충격을 받으면 쓰러지듯이 퍼져버린다. 이를 방지하기 위해서 모서리 4개 중에서 대각선으로 마주보는 CircleParticle들을 연결하는 2개의 SpringConstraint로 연결하되, 그 연결은 non-collidable springs 이어야 한다는 점이다.

위와 같은 방법으로 Group에 추가하면 사각형이 생기고 그 사각형 안에 X자 모양의 두 개의 선이 대각선으로 연결된 모양이 된다. 이렇게 만들어지면 외부의 충격이나 중력에 의해서 다른 그룹에 있는 particle들과의 충돌에 의해서 각도와 좌표가 바뀌는 CustomRectangleParticle을 생성할 수 있다. 이런 방법으로 사각형뿐만 아니라 다각형들도 연결을 통해서 생성할 수가 있다.

그러데 하다 보니 문제가 좀 있다. 4개의 모서리에 있는 CircleParticle의 크기를 작게 할 경우 SpringConstraint도 함께 무게가 실리지 않아서 다른 오브젝트와 충돌했을 때 그 안쪽으로 collision된 오브젝트들이 뚫고 들어온다는 점이다. 엔진의 계산 값이 벗어 났을 때는 오류가 발생한다. 이는 좀더 고민해 봐야겠다.



    

설정

트랙백

댓글

  • jin_u 2007.08.20 08:58 ADDR 수정/삭제 답글

    재밌네~ 예전에 이런류의 실험작들이 많이 있었지. 다시 봐도 신기하도다. 슬슬 물리 사이트 하나 오픈해야지? ^^
    그런데 콩알 만한거 만들어서 제일 큰거로 차니깐 사라져 버리네? ㅋㅋ

    • jasu 2007.08.20 11:17 신고 수정/삭제

      쿠쿠 집에 있으니 취미로 하는거지 일 시작하면 회사 일하기 바쁘것지...
      질량이 너무 가벼우면 collide 관계가 무너지는 경향이 좀 있더라... 앙드레미쉘의 revive는 안 그렇던뎅...cove하고 앙그레하고 같이 좀 해서 만들면 좋겠고만..안 친한가봥..쿠쿠