2015-07-08 10 views
6

Znajomy i ja tworzymy prototypy niektórych rzeczy w SpriteKit. To nie jest mój pierwszy przyjaciel, ale to mój pierwszy raz.iOS SpriteKit: applyForce do ciała fizycznego zupełnie inny efekt w zależności od modelu urządzenia

Mamy prostą kontrolę kwadratu. Możesz biegać do przodu i do tyłu na "naziemnym" węźle i możesz dotknąć przycisku skoku, aby "skakać".

z danego zbioru liczb do masy, grawitacji, itp, następujące

[self.physicsBody applyForce:CGVectorMake(0, 1500000)]; 

powoduje normalne patrząc Jump (prawie mały bunnyhop), gdy działa na iPad4 w trybie iPhone (aplikacja jest tylko iPhone na razie), ale na moim 5S skok jest około 20 do 40 razy wyższy i na skoku 4S jest dosłownie 100 lub 200 razy wyższy. ("Czasy wyższe" to guesstimate oparte na oglądaniu wizualnym, ale iPad wygląda normalnie, 5S wygląda jak skok supermana, a 4S wygląda jak superman zjadł szpinak i jego żona zgasła, zanim skoczył)

Ten sam kod działa na wszystkich urządzeniach. Nie jestem pewien, gdzie szukać ani co może być przyczyną tego.

+0

Wow, to jest bardzo duża liczba korzystać z applyForce! Czy na pewno właściwości, takie jak masa węzła i grawitacji z ujęciem są takie same za każdym razem? Czy używasz żadnych SKFieldNodes w swojej scenie? – sangony

+0

Nie ma SKFieldNodes, a grawitacja sceny, masa węzła itp. Są takie same przez cały czas.Nie ma nic, co można zmienić.Kilka SKLightNodes, garść "kawałek ziemi" "SKSpriteNodes i" player "SKSpriteNode oraz kamera, masa ustawiona jest na 80.0, a grawitacja na -9.8. Jeśli nie zmienisz masy z wartości domyślnej, która jest nieco mniejsza niż 0 liczby dziesiętnej, to Tak, siła byłaby ogromna, a zmiana masy na dużą wymagała większej siły, aby ją przenieść :).Wolę pracować (względnie) w liczbach całkowitych, tak aby masa i siła zostały odpowiednio dostosowane. – chadbag

+0

Cóż, jestem zaskoczony. Czy możesz umieścić bardziej odpowiedni kod? Co próbujesz wyizolować to zachowanie? – sangony

Odpowiedz

7

Powinieneś zastosowaćImpulse zamiast applyForce, jeśli aplikujesz natychmiast. Jeśli chodzi o applyForce, firma Apple docs state number:

"Przyspieszenie jest stosowane dla pojedynczego etapu symulacji (jedna klatka )."

Może być bardzo małe różnice czasowe w etapie prowadzi do dużych różnic, ponieważ siła jest zbyt duża na tylko jedna ramka. Jeśli korzystasz z aplikacji applyForce, powinieneś robić to na każdym etapie symulacji, aby utrzymać zastosowaną siłę przez pewien okres czasu. Zazwyczaj ruch skoku trwa bardzo krótko, dlatego często stosuje się metodę applyImpulse.

Oto kolejny cytat z docs firmy Apple dotyczących życie vs impulsu:

„Siła jest stosowana przez dłuższy czas w zależności od ilości czasu symulacji, który przechodzi między po zastosowaniu siły i kiedy przetwarzana jest następna klatka symulacji.Tak, aby zastosować ciągłą siłę do ciała, należy wykonać odpowiednią metodę za każdym razem, gdy przetwarzana jest nowa ramka. Siły są zwykle używane do ciągłych efektów Impuls powoduje chwilowa zmiana prędkości ciała, która jest niezależna o f ilość czasu symulacji , która minęła. Impulsy są zazwyczaj wykorzystywane do natychmiastowych zmian prędkości danego organizmu.”

Powiązane problemy