déplacer un corps dynamic par rapport à un autre corps dynamic

J'ai fait face à un problème pour lequel je ne trouve pas de solution. J'ai la plate-forme de swinging (corps1) et le héros (corps2) se tenant dessus. La plate-forme oscille alors le héros se déplace à droite et à gauche sur la plate-forme.

Au début je veux que le héros rest sur la plate-forme sans changer sa position par rapport à la plateforme. J'y suis parvenu en ajoutant SKPhysicsJointFixed à la plateforme et au héros.

Puis, à un moment dans le jeu, je veux que le héros court le long de la plate-forme, ce qui signifie que Y devrait restr le même par rapport à la plate-forme et X devrait croître. La seule solution que j'ai trouvée est de rendre le corps du héros statique et de changer sa position dans le didSimulatePhysics . Le problème avec cette approche est que cette position ne change pas avec précision. La position du héros est décalée d'une image par rapport à la position de la plate-forme.

Après que le héros ait atteint l'extrémité droite de la plate-forme, il devrait arrêter de bouger et se tenir sur la plate-forme. Je rends donc le corps du héros statique et j'ajoute de nouveau le joint fixe. Et parce que la position du héros change avec les décalages de la position du héros par rapport à la plateforme n'est pas correct. Parfois, il arrête quelques pixels sous la surface de la plateforme et parfois quelques pixels au-dessus de la surface.

Il y a donc une autre approche pour déplacer le héros le long de la plate-forme, le corps du héros doit restr dynamic tout le time.

J'ai un jeu avec des plates-forms flottantes mobiles. L'approche la plus simple et la plus dynamic pour get une vitesse relative correcte consiste simplement à faire des ajustements à la vélocité. Voici une version simplifiée de ce que je fais pour y parvenir.

Dans ma boucle de jeu, j'ai ce qui suit:

 if heroOnBridge { hero.extraMotion = floatingBridge.physicsBody!.velocity } else { hero.extraMotion = CGVector(dx:0,dy:0) } 

Ici, ce que je fais est de regarder constamment si mon héros est sur un pont mobile, si c'est le cas, je place la propriété "extra motion" de mon héros à la vitesse du pont sur lequel je suis. Si je ne suis pas sur un pont, je ne rajoute aucune vélocité supplémentaire. Notez que je ne montre pas comment heroOnBridge est calculé, car cela dépend vraiment de la façon dont vous définissez si vous êtes sur une plate-forme. Dans mon cas, je suppose que vous êtes sur une plate-forme si vous croisez le cadre de la plate-forme et êtes sur le terrain.

Ensuite, dans la zone où je calcule la vitesse de mon héros en fonction de sa direction (gauche, droite, saut, etc.), j'ajoute simplement l' extraMotion à la vélocité du héros.

Si vous ne le faites pas déjà, je vous suggère d'avoir une zone dans la boucle de jeu pour traiter le mouvement de vos personnages. Il vous permettra de modifier la vitesse de votre héros en fonction de certains facteurs (dans les airs, sauter, se déplacer à gauche / droite, sur une plate-forme, etc.)

Si vous avez besoin de plus d'aide pour calculer la partie de vélocité faites le moi savoir et je postrai plus de mon code. Vous pouvez également lire ma réponse ici pour régler la vélocité de manière fluide et dynamic.

Rappelez-vous, pour la plupart, vous ne voulez jamais définir la position de n'importe quoi directement, essayez toujours de définir la vitesse nécessaire pour atteindre cette position sur une certaine période de time. Cela empêche un mouvement très nerveux et imprévisible.