Diciamo che ho un SKSpriteNode che rappresenta una ruota di automobile, con un SKPhysicsBody circolare collegato con successo ad esso. Il genere sarebbe spostando lateralmente il gioco/simulatore di guida in auto 2d, ovviamente.Un modo per applicare zRotation in modo che influisca su SKPhysicsBody di conseguenza?
Quello che voglio è calcolare tutta la fisica del motore da solo senza ricorrere ancora al motore fisico SpriteKit. Mi piacerebbe avere il pieno controllo su come vengono calcolati i meccanismi del motore, della frizione, della trasmissione, ecc., Fino al regime della ruota motrice.
Da quel momento in avanti, però, darei volentieri il controllo al motore fisico SpriteKit, che calcolerebbe quindi ciò che accade, quando la ruota motrice girevole porta la superficie della strada. L'auto avanza, rallenta, accelera e/o le ruote scivolano, a seconda dei casi.
Calcolare la meccanica per ottenere il numero di giri della ruota non è un problema. Non sono sicuro su come andare da lì.
sono in grado di ruotare la ruota semplicemente applicando zRotation nell'aggiornamento: metodo, in questo modo:
self.rearWheelInstance.zRotation += (self.theCar.wheelRPS/6.283 * timeSinceLastUpdate); // revolutions/2pi = radians
In questo modo sono in grado di applicare la RPM esatto Ho calcolato in precedenza. Lo svantaggio evidente è che il motore fisico di SpriteKit è totalmente ignaro di questa rotazione. Per quanto ne sappia, la ruota si teletrasporta da una fase all'altra, quindi non crea attrito con la superficie stradale o qualsiasi altra interazione con altri corpi fisici di SpriteKit, del resto.
D'altra parte, può applicare la coppia alla ruota:
[self.rearWheelInstance.physicsBody applyTorque: someTorque];
o impulso angolare:
[self.rearWheelInstance.physicsBody applyAngularImpulse: someAngularImpulse];
Ciò ruotare la ruota in modo che SpriteKit fisica motore comprende, pertanto facendolo interagire correttamente con l'ambiente circostante.
Ma a meno che non manchi qualcosa di ovvio, questo considera la ruota come un "oggetto a rotazione libera" indipendente dal motore, dalla trasmissione o dal numero di giri dell'asse motore. In realtà, però, la ruota non ha la "scelta" di rotolare a qualsiasi RPM rispetto a quello che viene trasmesso attraverso la trasmissione all'asse (a meno che la trasmissione non sia in folle, il pedale della frizione sia abbassato o la frizione stia scivolando, ma quelli sono intere altre storie).
Quindi: 1) Sono in grado di manipolare in qualche modo zRotation in modo che il motore fisico SpriteKit 'capisca' come movimento rotatorio?
o
2) Ho un chiaro difetto nella mia logica che indica che questo non è quello che dovrei essere cercando, in primo luogo? In tal caso, potresti essere così gentile da indicarmi i difetti in modo da poter adottare una pratica migliore?
Grazie, ho avuto la sensazione che questo fosse il caso. Sto ancora riflettendo sulla fase esatta in cui dare il controllo del motore di fisica SK, e come farlo senza perdere la precisione che cerco. –