BOX2D Ускорение / Скорость в XNA - PullRequest
0 голосов
/ 24 июня 2010

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

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);

1 Ответ

3 голосов
/ 29 июня 2010

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

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

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

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

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

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

...