2017-06-28 3 views
1

Lorsque j'applique cette force au joueur body.applyForceToCenter(new Vector2(dir.x*500000*999999, dir.y*500000*999999), true); Je reçois pratiquement le même effet que lorsque je fais cela body.applyForceToCenter(new Vector2(dir.x, dir.y), true);. cette ligne de code est dans une méthode qui est appelée lorsque le joueur est supposé se déplacer dans une direction particulière dir qui est un Vector2. J'ai essayé d'appeler la méthode plusieurs fois et en utilisant applyForce(), applyLinearImpulse().libgdx force différente a le même effet sur le corps

+0

Quelles sont les valeurs de dir.x et de dir.y? Quelle est la taille de votre corps ou quelle est sa masse? si c'est très petit et très léger alors vous frappez probablement la limite de vitesse de box2D qui est d'environ 120m/s – dfour

+1

Just et FYI mais box2d n'aime pas les objets très grands ou très petits en raison de la précision. Les meilleures gammes IMO sont comprises entre 0,05 et 30 unités. – dfour

+0

le x et y sont le delta calculé à partir de touchDragged. Le delta du dernier contact et la nouvelle touche. L'objet est 50x50 et la densité est 0,0001f – DreamsInHD

Répondre

1

Box2D possède un capuchon de vitesse, qui est de 2 unités par pas de temps. En supposant 60 FPS, cela signifierait que la vitesse maximale est de 120 m/s.

Si nous supposons que dir est normalisé, vous atteindrez éventuellement une accélération de 500000*999999=499999500000 m/s^2 - ce qui est assez important et atteint la limite très rapidement.

Cela signifie que, dans une seconde, la vitesse aura augmenté de 499999500000 m/s, ce qui est bien au-dessus 120.

Comme @dfour a dit, utiliser les petits objets et les valeurs - Box2D fonctionne de manière optimale lorsque les objets se situent entre 0,1 et 10 m de taille.

+0

merci, mais comment afficher le carré à la même taille à l'écran que maintenant? J'utilise un 'ScreenViewport', ma compréhension des viewports est très limitée mais je l'ai lu avec ce viewport 1 unité == 1 pixel. Si je redimensionne, dois-je, chaque fois que je dessine quelque chose à l'écran, convertir des pixels en unités du monde, et cela inclut-il les trucs scene2d? Aussi, que recommanderiez-vous de redimensionner? – DreamsInHD

+1

En général, lorsque vous utilisez ScreenViewport et box2D, vous utilisez une sorte de rapport entre les pixels de l'écran et les unités box2D en raison de la nature des tailles d'écran. Certaines bonnes valeurs sont 8, 16, 32 et 64 pixels par unité. Cela signifie que lorsque vous définissez la taille de votre écran dans la caméra orthographique, vous divisez la largeur et la hauteur par le ratio pixel par mètre choisi. par exemple un écran 1024x768 utilisant un ratio de 16 pixels par unité serait 64 x 48 – dfour

+0

@dfour Merci! – DreamsInHD