2011-12-19 1 views
1

나는 인터넷에서 검색하면서 이걸 찾을 수있을 것이라고 생각했지만, 내가 찾은 모든 것은 퐁 (pong) 또는 다른 임의적 인 질문과 같은 것으로 벽을 튀게하는 공이다. 나는 2D 던전 크롤러 게임을 만들고 있습니다. 적을 죽이고 전리품을 떨어 뜨리면, 방금 공중에 던져진 것처럼 아이템이 날아 와서 유닛이 있던 타일 위에 무작위로 점령되기를 원합니다.C# 바운스/던지는 물리학을 던져 넣기

나는 이것을 알아 내려고 노력하고 있지만 알아낼 수는 없지만 아마도 많은 질문을받을 수 있습니다. 누군가 나를 도울 수 있다면 정말 감사 할 것입니다.

편집은 AS 요청한 :

이 좋아 잘 몬스터 나는 그것이에서의 타일 내에서 임의의 위치를 ​​선택할 것 파괴 될 때의이 위치 endLoc과 몬스터의 위치 startLoc를 호출 할 수 있습니다. 내가 생각

launchLoc = new Vector2(startLoc.X + ((endLoc.X - startLoc.X)/2), startLoc.Y - 20) 

: 그럼이라는 변수 launchLoc를이 두 위치 사이의 중앙 X 점을 발견하고 (즉 내가 항목에 의해 가고 싶어 얼마나 많은 픽셀이기 때문에) (20)에 의해 Y 감소, 이렇게하자 것 올바른 벡터를 생성합니다.

이제 startLoc에서 launchLoc으로 항목을 시작한 다음 endLoc으로 다시 가져와야합니다. 이것은 혼란스럽고 현실적인 호를 만드는 방법을 잘 모르겠습니다. 최종 결과는 그것이 마치 공중에 던져진 것처럼 가우스를 따라 움직이는 것처럼 항목을 움직이게 할 것입니다.

각 간격마다 속도를 증가 시키려고 시도했지만 속도가 startLoc과 launchLoc 사이의 X 차이의 120 배만큼 증가하는 배수로 증가했지만 제대로 작동하지 못했습니다. 이것이 최선의 방법인지 확실하지 않습니다. 나는 y 값이 20이고, 항목이 간격마다 1 픽셀 씩 올라 가기 때문에 120을 사용합니다. 따라서 1에서 20까지 더하면 120을 얻습니다. 이것은 x 움직임이 끊임없이 증가하도록 만듭니다.

이것은 2D로 작성되었습니다. 도움이되기를 바랍니다.

+1

문제가있는 코드가 있습니까? 그렇다면 여기에 게시 할 수 있습니까? 이런 식의 논리가 어떻게 작용할 것인가? 조금 더 자세하게 설명해 주시겠습니까? 더 많은 정보가 없어도 이와 같은 질문에 대답하는 것은 어렵습니다. –

+0

내 게시물이 업데이트되었습니다. – user1009573

+0

이것은 2d인가요? 그래서 화면에서 튀어 나오는 3 차원을 시뮬레이트해야합니까? – scottheckel

답변

1

당신은 시간 t (V (t)) 및 위치에 초기 속도 벡터로 시작 (페이지 (t)). 중력에 일정한 가속도 ( (t 0) = < 0 -9.8 m/s 사용자 입력 값이 달라도 2 > )까지 오브젝트 랜드를 생성 가정 할 수있다. 그래서 다음에 하나의 타임 슬라이스에서 진행을위한 운동의 일반적인 형태는 다음과 같습니다

p(t) = 0.5*a(0)*(t-t0)2 + v(0)*(t-t0) + p(0) 
v(t) = a(0)*(t-t0) + v(0)

는 객체의 경로에 대한 표면을 교차 무슨 시간에 알아 내야, 그 움직임을 정지 할 때 알아 내기 위해 그것은 튀었다. 이것이 합리적으로 발생할 것으로 예상되는 모든 표면에 대해이 작업을 수행해야합니다. 그래서 라인 방정식 Ux + Vy + T = 0 함께 비행기에 대한 당신과 같이 그 구성 요소에 위치 벡터를 휴식 : 찾을 이

p(t) = <px(t), py(t)>
그런 다음 quadratic formula를 사용 p(tc) 만족 라인 방정식 tc :
0.5*(Uax(t0)+Vay(t0))*tc2 + (Uvx(t0)+Vvy(t0))*tc + (Upx(t0)+Vpy(t0)+T) = 0
는 분기를 선택했다 > C 톤 t 그 0.거기에서 물체가 표면과 충돌하는 위치를 간단히 파악할 수 있습니다. 그런 다음 바운스의 동작에 따라 속도 벡터와 위치 벡터를 업데이트 할 수 있습니다. 평면이 축 방향으로 정렬 된 경우 (즉, Z 축에 수직 인 법선 벡터가있는 수평 평면) 속도 벡터의 Z 구성 요소 부호를 반전하고 전체 속도 벡터에 약간의 감쇠 인수 d를 곱하면됩니다. 여기서 0 ≤ d < 1은 속도를 감쇠시킵니다. 그런 다음 미리 정해진 시간이 지나가거나 속도가 최소값에 도달 할 때까지 반복하십시오 (귀하의 통화).

임의로 지향 된 평면에서는 조금 더 어려워집니다. 충돌의 발생 각도를 계산하고 평면 법선에 대한 속도 벡터를 반영해야합니다. 나는 당신이 아마도 그것에 관심이 없다고 생각하기 때문에 여기에 세부 사항을 설명하지 않을 것입니다.