빠른 것을 느리게 보이게 만들기 (Box2D)


9

나는 당신이 공을 던져 상대편에 공을 던지도록 당신이 trebuchet을 통제하는 게임을하고 있습니다.

'Medieval Siege'라는 게임과 같습니다. trebuchet이 팔을 스윙 할 때, 플레이어는 버튼을 누르고 공을 놓기 위해 최고의 순간을 포착해야합니다. 그러면 공이 탄젠트 각도로 날아갑니다. 여기에 이미지 설명을 입력하십시오 내 문제는 현재 플레이어가 올바른 순간을 포착하기에는 트 레뷰 체트 암 스윙이 너무 빠르다는 것입니다. 그 사이에 그렇지 않으면 충분히 빠를 수 없습니다. 그리고 공과 trebuchet 암을 연결하는 작은 끈이 있습니다. 팔이 너무 느리게 흔들면 팔이 움직일 때 공이 끈에 매달려 있습니다.

스텝 크기를 토글하여 문제를 해결합니다. 팔이 흔들릴 때마다 스텝 크기를 1/60에서 1/200으로 변경합니다. 플레이어가 공을 놓으면 1/60으로 돌아갑니다.

내 게임이 네트워킹이 가능한 멀티 플레이어 인 경우를 제외하고는 꽤 잘 작동합니다. 따라서 단계를 변경하면 문제가 발생할 수 있습니다.

내가 생각할 수있는 또 다른 해결책은 천천히 스윙하는 것이지만 플레이어가 공을 놓을 때 방향을 유지하면서 공에 속도를 수동으로 추가합니다. 나는이 솔루션이 그것이 가짜처럼 보이게하는 것을 좋아하지 않으며 끈을 매우 짧게 만들지 않으면 공이 끈에 매달려 있다는 문제가 여전히 있습니다.

감사합니다!


편집하다

모든 사람의 의견에 감사드립니다. 저는 팔을 느리게 흔들고 플레이어가 공을 놓을 때 공의 속도와 2 배를 잡아 문제를 해결합니다. 단계 크기를 변경하는 것과 정확히 같습니다. 내가해야 할 일이 하나 더 있습니다. 팔이 정말로 느리게 흔들 리기 때문에 공은 스윙 대신 팔 끝에 매달려 있습니다. 나는 스윙 기간 동안 그리고 스윙 기간 동안에 만 공에 중력과 같은 힘을가함으로써 이것을 해결했다. 그런 다음 더 이상 거기에 매달리지 않고 팔과 함께 스윙하십시오.

@MrCranky의 답변은 상세하고 실행 가능한 것처럼 보이므로 받아 들일 것입니다. :)


아마도 트레버 셰트를 천천히 움직일 수 있지만 공에 작용하는 힘을 곱할 수 있습니까? 전에 Box2D를 사용해 본 적이 없으므로 이것이 멍청한 생각이라면 죄송합니다. 그외에, 나의 유일한 추측은 더 무겁거나 가벼운 것이 느린 속도에서 허용 가능한 결과를 줄 수 있는지 확인하기 위해 공의 질량으로 주위를 돌아 다니는 것입니다. 또한 실제 trebuchets의 물리학을 살펴볼 가치가 있습니다. 그것들은 다소 느리게 보이기 때문에 , 그것들에 관한 데이터 (크기, 탄약, 힘 등)는 당신에게 시뮬레이션 된 아이디어를 줄 수 있습니다.
Christian

2
컴퓨터 물리학이 "실제"처럼 동작하도록하는 것은 정말 어렵습니다. 거의 모든 물리 엔진은 강체를 시뮬레이션합니다. 즉, 트레 보체 암의 굽힘과 같은 효과가 로프 물리 나 재료 거동이 정확하지 않기 때문에 "속임수"가없는 정확한 시뮬레이션은 불가능합니다. 실제처럼 보이는 것에 가까워지는 과정은 다음과 같습니다 : 비틀기, 비틀기, 비틀기, 치트, 비틀기, 비틀기, 치트, 치트, 비틀기, 시작, 비틀기, 비틀기, 비틀기, 비틀기, 치트, 비틀기, 치트 , 치트, 비틀기.
LearnCocos2D

4
새끼 고양이 대포는이 문제에 대한 가장 현실적인 접근 방식을 사용합니다. 인간 수동으로 제어 할 수 있지만 천천히 발사 할 수있는 천천히 움직이는 트레버 bu의 느낌을주고 싶다면 실제로 실제 현실 조작에 나쁘고 기계 지원이 필요합니다. 물리적으로 가능한 것보다 더 빨리, 당신은 "발사"의 순수 예술적 애니메이션을 생성 한 다음 사용자가 애니메이션을 중단 한 위치에 따라 공을 스폰 할 수 있습니다.
MickLH

답변:


3

본능적으로 나는 대답하기 위해 필요한 문맥의 상당 부분을 놓치고 있다고 말하고 싶습니다. "멀티 플레이어가 시간 단계를 바꾸지 못하게하는 이유는 무엇입니까?"

네트워크 연결을 통해 물리 시뮬레이션을 공유하려는 경우 일반적으로 수행하기가 매우 어렵습니다. 시뮬레이션은 매우 쉽게 분기되며, 특히 패킷을 잃을 수있는 네트워크 연결에서는 매우 쉽게 분기 할 수 없습니다.

귀하의 질문에 대한 간단하고 가장 강력한 답변은 다양한 시간 간격을 사용하는 것입니다. 실제 순간에 1 초씩 물리 시뮬레이션을 업데이트하는 대신 의사 결정의 순간에 접근 할 때 0.5 초 또는 다른 적절한 수로 업데이트하십시오. 통합 효과이므로 의사 결정 기간 동안 업데이트 속도를 더 낮은 속도로 간단히 낮출 수 있지만 낮은 속도로 빠르게 하향 보간 할 수도 있습니다. 어느 쪽이든, 당신은 기본적으로 물리 시뮬레이션을 슬로우 모션으로 재생합니다. 플레이어가 결정을 내릴 수있을 정도로 느리게 완벽하게 정확하게 동작해야합니다. 나는 물리학을 퍼지시키는 다른 수단을 고려하지 않을 것입니다. 그것들은 모두 끔찍하게 해결되고 '올바른'느낌이 들지 않을 것입니다.

다시 네트워킹 구현으로 돌아갑니다. 추가 정보가 없으면 두 가지 선택이있을 것입니다. 첫째, 다른 네트워크 당사자와 잠금 단계로 작동하는 경우. 따라서 한 명의 플레이어가 결정을 내리기 위해 속도를 늦추어 야 할 때 두 플레이어의 속도를 똑같이 느리게하십시오. 해고하지 않은 플레이어에게는 성 가시고 이상하게 느껴질 것입니다. 왜냐하면 자체 반응 시간이 혼동되기 때문입니다.

두 번째로, 두 개의 투석기가 서로 발사한다고 상상해보십시오. 투석기는 던지기까지 10 초가 걸리며, 발사 창은 T + 5에서 시작합니다. P1은 T + 0에서 발사주기를 시작하고 T + 5에서는 로컬 물리 시뮬레이션을 50 % 느리게합니다. 전체 사이클을 플레이하는 데 15 초가 걸립니다. 따라서 T + 5에서 P1은 P2에게 10 초의 시작주기 를 최고 속도로 재생하도록 지시합니다.. 따라서 P1은 트레 부셰 사이클이 15 초, P2는 10 초가 걸리는 것을 보지만 두 선수는 T + 15의 사이클 마무리를 본다. P1이 실제로 해제 될 때, P2는 그들이 명목주기에서 해제했을 때 P2에게 알려줍니다. 따라서 P1이 T + 10에서 릴리스되면 실제로는 10 초의 시작주기에서 7.5 초입니다. P2는 T + 12.5 (릴레이의 로컬 재생에서 7.5 초)에서 릴리즈를 보여줄 수 있으며 두 플레이어 시뮬레이션은 사이클의 동일한 물리적 지점에서 발사체를 발사해야합니다.

따라서이 두 번째 접근 방식에서는 더 이상 잠금 단계를 시뮬레이션하지 않습니다. 두 개의 독립적 인 시뮬레이션을 실행하고 있지만 플레이어 입력을 추적합니다. 두 선수가 7.5 초에 발사주기에 석방되었다고 들었다면, 발사체가 어디로 착륙 할 것인지에 동의해야합니다. 그러나 실제로는 매우 빠르게 확산 될 수 있으므로 시뮬레이션 상태를 어떻게 든 동기화해야합니다.



0

trebuchet이 너무 빠르게 움직이면 시간을 조정하여 속도를 늦출 수 있습니다. 즉, 1 초마다 실시간으로 물리 시뮬레이션에서 0.1 초만 통과시킵니다. 이제 플레이어의 관점에서 볼은 10 배 느리게 움직입니다.

실제로 동일한 효과를 얻을 수있는 또 다른 방법이 있습니다. 시간을 조정하는 대신 시간을 포함하여 모든 물리 상수를 조정하십시오. 예를 들어 중력 가속도 의 속도 / 시간 = 거리 / 시간 ²의 단위가 있으므로 게임에서 중력이 유일한 상수 인 경우 100 = 10²의 배율로 줄이면 시간을 10의 속도로 늦추는 것과 같은 효과를 얻을 수 있습니다. .

물론, 물리 모델에 시간 단위 (또는 속도 = 거리 / 시간 또는 가속 = 거리 / 시간 ² 등)를 가진 다른 상수가 포함 된 경우, 궤도를 동일하게 유지하려면 배율을 조정해야합니다. .

실제로 얼마나 멀리 갈 수 있는지에는 한계가 있습니다. 예를 들어 100 배로 속도를 늦추면 trebuchet을 제어하기가 쉽지만 플레이어는 기다리는 시간이 지루할 수 있습니다. 공을 발사 한 후 공이 천천히 뜹니다. 그것이 문제라면, trebuchet이 발사되는 동안 실제로 느린 시간 스케일링을 사용하지만 공이 발사되면 더 빠른 시간 스케일로 전환하는 것과 같은 다른 답변에서 제안 된 것과 같은 고급 트릭에 의지해야 할 수도 있습니다.


고맙지 만 u 편집 내용을 보지 못했을 것입니다. 그래, 나는 당신의 대답의 마지막 방법으로 그것을 해결
Arch1tect
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.