2010-06-24 2 views
0

У меня возникла проблема, и я пробовал всю возможную комбинацию. Я пытаюсь заставить свой мяч просто как можно быстрее вылетать с экрана. Единственная проблема - независимо от того, какие значения я устанавливаю, она просто движется с той же скоростью. Я пробовал делать ballBody.SetLinearVelocity (новый Vector2 (1000000f, 0));BOX2D Ускорение/скорость в XNA

ballBody.SetLinearVelocity (новый Vector2 (10f, 0));

И каждое число между ними, и мяч все еще движется с одинаковой скоростью. Что именно я делаю неправильно. Также ниже приведен код для тела. Все, что я хочу, - это то, что мяч идет очень быстро, почти как машина Пинбола.

 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

Помогает ли эта связанная справка? http://stackoverflow.com/questions/2576697/box2d-maximum-possible-linear-velocity –

ответ

3

В Box2D имеется максимальная линейная скорость из-за численной устойчивости. Тем не менее, он установлен достаточно высоко, чтобы вы никогда не попадали ему при нормальном использовании.

Следует отметить, что в документации указано, что Box2D работает лучше всего с длиной от 0,1 до 10,0. Это представляется в метрах в соответствии с автором и делает его пригодным для имитации объектов от бейсболов до бочек и до автобусов. Кроме того, он становится более чувствительным к числовой неточности.

Попробуйте уменьшить вашу систему координат, чтобы ваш средний имитируемый объект (возможно, шарик) имел размер 1,0 единицы. Это поможет Box2D оптимально имитировать вашу систему.

Учитывая этот диапазон работы, скорости, превышающие 10 или 100 единиц в секунду, могут вызвать проблемы, особенно если вы примените их к динамическим телам, которые получают массивные импульсы. Если эти высокоимпульсные тела должны столкнуться с каким-то другим телом, импульс распространится, и вся ваша система может улететь/стать неустойчивой.

По этой причине, вероятно, лучше всего превратить шар в кинематический корпус , как только он должен улететь. Кинематическое тело движется по скорости, но не сталкивается и не действует силами. Я не уверен, но возможно, что кинематические тела допускают более высокие скорости, так как они не содержат импульсных данных.

Редактировать: Кроме того, вы обычно не должны использовать коэффициент реституции выше 1.0f. Это приведет к тому, что тело достигнет gain кинетическая энергия во время столкновения. Это невозможно в реальном мире, но для этого потребуется некоторый источник энергии. Представьте себе химическое соединение, прикрепленное к телу, которое взрывается при ударе, в результате чего в систему накачивается больше энергии.