2017-01-06 3 views
0

J'essaie de comprendre la bonne façon de déplacer des objets "obstacle" dans corona/box2d. Je veux savoir écrire mon code pour que le mouvement soit déterministe et en phase avec le moteur physique. Est-ce possible?Comment déplacer des objets "obstacles". Corona SDK Physics Box2D. Mise à jour physique?

Je suis familier avec Unity qui a une mise à jour physique (FixedUpdate). Où vous pouvez ajouter un peu de code à exécuter à chaque étape de la physique. Cela maintient la physique déterministe, le cadre et le temps du système indépendant. Par exemple, dans mon jeu, je veux faire des choses comme: Faire une plate-forme qui se déplace d'avant en arrière, faire un objet qui monte et descend de taille. Je voudrais toujours que la physique fonctionne correctement et permette à la balle dans mon jeu de rebondir sur celles-ci par exemple. Selon le cas, j'imagine que je devrais utiliser soit kinematic or dynamic bodies.

J'ai cherché partout et la façon de manipuler périodiquement ces objets est d'utiliser:

  • timer.performWithDelay. Mais cela a un problème mentionné dans les docs "Les minuteurs fonctionnent à l'heure du système.Si l'application est suspendue, les minuteurs en cours ne seront pas automatiquement mis en pause"
  • Écoute d'un événement enterFrame. Mais cela a un problème similaire, si la fréquence d'images baisse, l'objet ne sera pas déplacé suffisamment. Nous pouvons utiliser le temps delta pour faire face à cela, mais cela a des problèmes de déterminisme (déplacer un objet trop sur un pic de décalage).
  • transition.to. Je suppose que cela est implémenté avec timer.performWithDelay et a les mêmes problèmes.

Je ne pense pas qu'aucun d'entre eux se comportera de façon déterministe. Aucune suggestion? Merci pour l'aide.

+0

Je ne connais pas d'autres méthodes. Est-ce que "Les temporisateurs fonctionnent sur l'heure du système, si l'application est suspendue, les temporisateurs ne seront pas automatiquement suspendus" est-ce vraiment un problème? Vous pouvez détecter quand l'application est suspendue. En savoir plus [Tutoriel: Gestion des événements du système Corona] (https://coronalabs.com/blog/2012/05/15/handling-corona-system-events/). – ldurniat

+0

On dirait que le modèle physique a tous ces effets secondaires de synchronisation. :(Je pense qu'il a vraiment besoin d'un moyen de courir dans "l'étape de verrouillage" avec les mises à jour de physique.Un événement "enterPhysicsStep" pourrait résoudre ce problème – 1337Rooster

+0

Avez-vous essayé d'afficher le groupe pour les avoir tout à fait? – Amir

Répondre

0

Vous devriez vraiment utiliser:

object:setLinearVelocity(xVelocity, yVelocity) 

ou

object:applyForce(xForce, yForce) 

au lieu de transition.to.