2015-08-13 20 views
11

Załóżmy, że mam węzeł SKSpriteNode, który reprezentuje koło samochodowe, z okrągłym modułem SKPhysicsBody, które jest z nim pomyślnie połączone. Gatunek ten byłby oczywiście z bocznym przewijaniem gry/symulatorem jazdy samochodem 2d.Sposób zastosowania zRotation, aby odpowiednio wpłynął na SKPhysicsBody?

To, czego chcę, to wyliczyć całą fizyczną fizykę w silniku, nie odwołując się jeszcze do silnika fizyki SpriteKit. Chciałbym zachować pełną kontrolę nad tym, jak obliczane są mechanizmy silnika, sprzęgła, skrzyni biegów itd., Aż do prędkości obrotowej koła napędowego.

Od tego momentu chętnie przekazałbym kontrolę silnikowi fizyki SpriteKit, który następnie obliczałby, co się stanie, gdy obrotowe koło napędowe dotknie powierzchni drogi. Samochód porusza się, zwalnia, przyspiesza i/lub koła się ślizgają, niezależnie od przypadku.

Obliczanie mechaniki, aby uzyskać obroty koła nie stanowi problemu. Po prostu nie jestem pewien, jak przejść dalej.

jestem w stanie obrócić kierownicę po prostu stosując zRotation w aktualizacji: metody, na przykład:

self.rearWheelInstance.zRotation += (self.theCar.wheelRPS/6.283 * timeSinceLastUpdate); // revolutions/2pi = radians 

ten sposób jestem w stanie zastosować dokładną RPM mam wyliczoną wcześniej. Oczywistym minusem jest to, że silnik fizyki SpriteKit jest zupełnie nieświadomy tego obrotu. Mimo wszystko wie, że koło teleportuje się z jednej fazy do następnej, więc nie powoduje tarcia o nawierzchnię drogi ani żadnej innej interakcji z innymi obiektami fizyki SpriteKit, jeśli o to chodzi.

Z drugiej strony, mogę zastosować moment obrotowy na koło:

[self.rearWheelInstance.physicsBody applyTorque: someTorque]; 

lub kątowy impulsowej:

[self.rearWheelInstance.physicsBody applyAngularImpulse: someAngularImpulse]; 

to kręci kołem w sposób, który SpriteKit fizyki silnik rozumie, co sprawienie, by poprawnie oddziaływał z otoczeniem.

Ale jeśli nie brakuje mi czegoś oczywistego, uznaje się to koło za "swobodny obiekt toczny" niezależnie od prędkości obrotowej wału korbowego, przekładni lub osi napędowej. W rzeczywistości koło nie ma jednak "wyboru" toczenia się z jakimkolwiek innym obrotem na minutę niż to, co jest przekazywane przez układ przeniesienia napędu do osi (chyba że skrzynia biegów jest ustawiona w położeniu neutralnym, pedał sprzęgła jest opuszczony lub sprzęgło się ślizga, ale to są całe inne historie).

Więc: 1) Czy jestem w stanie jakoś manipulować zRotation w taki sposób, że silnik fizyki SpriteKit "rozumie" jako ruch obrotowy?

lub

2) Czy muszę mieć wyraźny błąd w moim logiki, która wskazuje, że nie jest to co mam się starać w pierwszej kolejności? Jeśli tak, to czy możesz być tak uprzejmy, aby wskazać mi wadę (s), aby zamiast tego zastosować lepszą praktykę?

Odpowiedz

4

Po kilku ślepych zaułkach zauważyłem, że w rzeczywistości istnieje sposób bezpośredniego manipulowania obrotem koła (w przeciwieństwie do przykładania momentu obrotowego lub uderzenia) w sposób, który wpływa odpowiednio na silnik fizyki.

Sztuką jest manipulować właściwość angularVelocity z physicsBody koła, tak jak poniżej:

self.rearWheelInstance.physicsBody.angularVelocity = -self.theCar.wheelRadPS; 
// Wheel's angular velocity, radians per second 
// *-1 just to flip ccw rotation to cw rotation 

W ten sposób jestem w bezpośredniej kontroli prędkości obrotowych kół napędowych bez utraty ich zdolności do interakcji z innymi ciałami w symulacji fizyki SpriteKit. Pomogło mi to pokonać tę przeszkodę, mam nadzieję, że pomogło komuś innemu.

9

Prosta odpowiedź, mieszanie ustawień 2d interfejsu użytkownika, takich jak pozycja i zRotation, z dynamicznym systemem fizyki nie przyniesie pożądanych rezultatów, jak zauważyliście. Jak sam określisz, będziesz musiał użyć fragmentów symulacji fizyki, takich jak impuls i moment pędu.

dwa kawałki układanki, które mogą również pomóc to:

Physics Joints - mogą robić takie rzeczy jak połączyć koło do axel tak, że można go swobodnie obracać, należy ustawić limity obrotu, ale nadal nadają obrotowa sił na nim.

Dynamically Adjusting Physics Properties - jak zwiększenie tarcia, kątowe tłumienie lub dodanie ujemnego przyspieszenia do osi, gdy użytkownik naciska hamulce.

+0

Dziękuję, miałem przeczucie, że tak będzie. Nadal zastanawiam się nad dokładną fazą, w której daję kontrolę silnikowi fizyki SK i jak to zrobić, nie tracąc dokładności, której szukam. –

Powiązane problemy