2015-07-08 5 views
6

Un mio amico e io sto prototipando alcune cose in SpriteKit. Questa non è la prima volta che il mio amico la usa, ma è la mia prima volta.iOS SpriteKit: applyForce al corpo fisico effetto completamente diverso a seconda del modello del dispositivo

Abbiamo un semplice controllo di un quadrato. Puoi correre avanti e indietro su un nodo "terra" e puoi toccare un pulsante di salto per "saltare".

Con un dato insieme di numeri per la massa, la gravità, ecc, il seguente

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

provoca un salto alla ricerca normale (quasi un piccolo bunnyhop) quando eseguito su un ipad4 in modalità iPhone (app è solo iPhone per ora), ma sul mio 5S il salto è da circa 20 a 40 volte più alto e su un 4S il salto è letteralmente come 100 o 200 volte più alto. (i "tempi più alti" sono una stima approssimativa basata sul guardare visivamente, ma l'iPad sembra normale, il 5S sembra un salto da superman, e il 4S assomiglia al superman mangiato gli spinaci e sua moglie lo spegne prima di saltare)

Lo stesso identico codice è in esecuzione su tutti i dispositivi. Non sono sicuro di dove guardare o cosa potrebbe causare questo.

+0

Wow, che è un numero estremamente elevato da usare con applyForce! Sei proprietà certo, come la massa del nodo e la gravità della scena sono gli stessi ogni volta? Stai usando qualsiasi SKFieldNode nella tua scena? – sangony

+0

Non ci sono nodi SKField, e la gravità della scena, la massa dei nodi, eccetera sono sempre gli stessi.Non c'è nulla che possa cambiarli.Solo pochi SKLightNodes, un mucchio di "pezzo di terra" "SKSpriteNodes, e il" player "SKSpriteNode .E una fotocamera.La massa è impostata su 80.0 e la gravità a -9,8 Se non si modifica la massa dal valore predefinito, che è un numero inferiore a 0 decimale, quindi sì, la forza sarebbe enorme: cambiare la massa in un numero elevato richiede una forza maggiore per spostarlo :).Preferisco lavorare in numeri (relativamente) interi, quindi la massa e la forza sono regolate così. – chadbag

+0

Beh, sono perplesso. Puoi pubblicare più codice rilevante? Che cosa hai provato ad isolare questo comportamento? – sangony

risposta

7

È necessario applicare Impulse anziché applyForce se lo si sta applicando all'istante. Riguardo applyForce, Apple docs stato

"L'accelerazione viene applicata per un singolo passo di simulazione (uno frame)."

potrebbe essere il più piccole differenze temporali del passo sta portando a grandi differenze perché la forza è molto grande oltre solo 1 fotogramma. Se stai usando applyForce, dovresti farlo in ogni fase della simulazione per mantenere la forza applicata per un periodo di tempo. In genere il movimento di un salto avviene in un periodo di tempo molto breve, quindi viene spesso utilizzato apply Impulse.

Ecco un'altra citazione dalla documentazione Apple per quanto riguarda la forza vs impulso:

"Una forza viene applicata per un periodo di tempo in base alla quantità di tempo di simulazione che passa tra quando si applica la forza e quando viene elaborato il fotogramma successivo della simulazione Quindi, per applicare una forza continua a un corpo, è necessario effettuare il metodo appropriato chiamate ogni volta che viene elaborato un nuovo frame. Le forze vengono solitamente utilizzate per gli effetti continui Un impulso rende una variazione istantanea della velocità del corpo di indipendente o f la quantità di tempo di simulazione superata. Gli impulsi sono di solito utilizzati per le modifiche immediate per la velocità di un corpo ."

Problemi correlati