2010-06-24 10 views
0

J'ai un problème, et j'ai essayé toutes les combinaisons possibles. J'essaie de faire en sorte que ma balle sorte de l'écran le plus rapidement possible. Le seul problème est que peu importe les valeurs que je définis, il se déplace juste au même rythme. J'ai essayé de faire ballBody.SetLinearVelocity (nouveau Vector2 (1000000f, 0));BOX2D Accélération/Vitesse dans XNA

ballBody.SetLinearVelocity (nouveau Vector2 (10f, 0));

Et chaque nombre entre les deux, et la balle se déplace toujours à la même vitesse. Qu'est-ce que je fais mal? Aussi le code pour le corps est ci-dessous. Tout ce que je veux, c'est que la balle aille très vite, presque comme un flipper.

 var bodyDef = new BodyDef(); 
     bodyDef.position = new Vector2(400, 200); 

     bodyDef.type = BodyType.Dynamic; 
     bodyDef.fixedRotation = true; 


     ballBody = world.CreateBody(bodyDef); 

     var circleShape = new CircleShape(); 
     circleShape._radius = 12.5f; 

     var fixtureDef = new FixtureDef(); 
     fixtureDef.restitution = 1.4f; 
     fixtureDef.shape = circleShape; 
     fixtureDef.friction = 0; 


     ballBody.CreateFixture(fixtureDef); 
+0

Est-ce que cet article aide? http://stackoverflow.com/questions/2576697/box2d-maximum-possible-linear-velocity –

Répondre

3

Il y a une vitesse linéaire maximale dans Box2D en raison de la stabilité numérique. Cependant, il est suffisamment élevé pour ne jamais être utilisé normalement.

Vous devriez noter, et cela est mentionné dans la documentation, que Box2D fonctionne mieux avec des longueurs comprises entre 0,1 et 10,0. Ceci est imaginé en mètres selon l'auteur et le rend apte à simuler des objets allant des balles de baseball aux tonneaux et jusqu'aux bus. Au-delà, il devient plus sensible à l'inexactitude numérique. Essayez de réduire votre système de coordonnées pour que votre objet simulé moyen (une balle peut-être) ait une taille de 1,0 unité. Cela aidera Box2D à simuler votre système de manière optimale. Compte tenu de cette plage de fonctionnement, des vitesses supérieures à 10 ou 100 unités/seconde pourraient poser des problèmes, en particulier si vous les appliquez à des corps dynamiques qui reçoivent des moments massifs. Si ces corps à haute impulsion devaient entrer en collision avec un autre corps, l'élan se répandrait et tout votre système pourrait finir par s'envoler/devenir instable.

Pour cette raison, il est probablement préférable de transformer la boule en un corps cinématique une fois qu'il est supposé s'envoler. Un corps cinématique se déplace en fonction de la vélocité, mais ne se heurte pas et n'est pas sollicité par des forces. Je ne suis pas sûr mais il est possible que les corps cinématiques soient autorisés à des vitesses plus élevées car ils ne portent pas de données de quantité de mouvement.

Editer: De même, vous ne devriez normalement pas utiliser un coefficient de restitution supérieur à 1,0f. En faisant cela, le corps gagnera de l'énergie cinétique pendant la collision. Ce n'est pas impossible dans le monde réel mais nécessiterait une source d'énergie. Imaginez un composé chimique attaché au corps qui explose à l'impact, ce qui entraîne une plus grande quantité d'énergie à pomper dans le système.