2012-05-02 2 views
2

플랫폼 (직사각형)이 서 있거나 걷는 플랫폼의 범위에 따라 문자 스프라이트를 회전해야합니다. 저는 그가 서있는 플랫폼의 경사면에 따라 회전시켜 효과를 얻었습니다. 그러나 두 가지 문제가 있습니다.걷고있는/앞으로 서있는 경사에 따라 캐릭터를 부드럽게 회전시키는 방법은 무엇입니까?

먼저 회전이 부드럽 지 않습니다. 캐릭터가 평평한 플랫폼에서 경 사진 플랫폼으로 걸어 가면 즉각적으로 회전하며 또한 회전으로 인해 약간 위로 밀려납니다.

둘째, 일단 그가 경사면에서 평평한 플랫폼 위로 걸어 오면 문자를 그에 따라 회전시킬 수 없습니다. 그 시점에서 캐릭터는 평평한 플랫폼과 경 사진 플랫폼 (모두 함께 배치 됨)과 충돌하기 때문에 두 단계의 충돌 감지 기능이 함께 작동하기 때문에 몇 단계 동안 캐릭터가 앞뒤로 미친 듯이 회전합니다.

나는 캐릭터의 얼굴을 감지하여 해결하려고 노력했지만 충돌의 감지 만 할 수 있기 때문에 어떤 점 (왼쪽 또는 오른쪽)이 먼저 닿았는지 알 수는 있지만 작동하지 않았습니다. "충돌 없음"또는 "캐릭터가 플랫폼을 떠날 때".

나는 상황에 대한 삽화를 첨부했다. 도와주세요, 고마워요!

추 신 : 이미지를 게시 할 수 없으므로 다음 웹 사이트를 방문하십시오. http://i.stack.imgur.com/jqPjt.png. 감사.

+0

특별한 취급을하지 않으면 왼쪽에있는 케이스를 얻을 수 있습니다 ... 아니요? 엔진이 그 일을하도록 그냥두면 어떻게 될까요? – iforce2d

+0

@ iforce2d : 시도해 보았습니다 ...하지만 제가 적용하는 힘은 직사각형의 중심에서 시작되었으므로 아래쪽에서부터 시작된 것이 아니므로 경사면에 부딪 힐 때 뒤로 당기지 않고 앞으로 굴립니다. . 또 다른 것은이 게임이 일종의 플랫폼 게임이기 때문에 캐릭터를 자유롭게 회전시키지 않기를 바란다. – Dai

답변

2

로테이션이 표시됩니다. 문자 직사각형 주위를 회전해야합니다. 그것은 당신의 문제 중 일부를 해결할 것이지만 전부는 아닙니다.

문자가 2 개의 플랫폼과 접촉하는 경우를 처리해야합니다. 현재 플랫폼에서 직접 각도를 추출하여 캐릭터에 할당하는 것 같습니다. 그것은 당신이 다른 접촉점을 가질 때 당신이 임의의 각도를 필요로하기 때문에 그것을 자르지 않을 것입니다.

해결 방법은 두 개의 접점 사이에 벡터를 생성 한 다음 벡터의 구성 요소 인 x,y을 가져오고 atan2(x, y)으로 전화하십시오. 이렇게하면 접촉점 사이의 각도가 라디안 단위로 표시됩니다. 매개 변수를 바르게 사용하십시오! 게임 개발을 위해서는 삼각법과 벡터 수학을 알고 있어야합니다. 여기서 일어나는 일은 두 개의 접촉점에 의해 정의 된 빗변이있는 축으로 정렬 된 직각 삼각형을 작성한 다음 삼각형을 뒤집고 x 및 y 구성 요소를 교체하여 tan = opp/adj을 사용하여 각도를 얻습니다.

접촉점이 항상 특정 순서로 지정되어 있는지 확인하거나 작성한 삼각형이 다른 방향을 향하게되므로 이상한 각도로 회전하게됩니다. 먼저 x 좌표를 기준으로 정렬을 수행해야 할 수도 있습니다.

1

이 예제의 쉬운 해결책은 전체 개체가 아닌 모서리에서 충돌 감지를 수행하는 것입니다. 터치 만하는 각도와 같은 각도로 터치하는 지점에서 오브젝트를 회전시킬 수 있습니다. 이 솔루션은 각도를 올렸을 때만 작동합니다. 이를 해결하기 위해 측면에서 충돌 감지를 수행합니다. 그런 다음 측면이 만지는 정도의 각도로 접촉 코너를 회전합니다.

+0

죄송합니다. 답변을 모두 답변으로 표시 할 수 없습니다. 아직 충분히 업 그레 이드 할 수 없으며 평판이 충분 해집니다. box2d에서 나는 실제로 당신이 말했듯이, 전체 물체에 대해 충돌 탐지를함으로써 정확한 접촉점을 얻을 수 없다. 개체의 구석에 몇 개의 센서를 놓고 회전 각도를 결정할 때 사용하려고합니다. 고맙습니다. – Dai

관련 문제