Войти
ПрограммированиеФорумОбщее

Расчет конечной точки приземления тела Box2D (2 стр)

Страницы: 1 2
#15
11:24, 12 дек. 2013

CasDev
> Но ИМХО проще будет другой движок приспособить, на bpx2d свет клином не
> сошелся.
Мне кажется другие движки не так хороши, ведь Box2D самый распространенный, на нем сделано большое количество игр, и отзывов о нем слышал хороших больше чем о Chipmunk-е.
Да и проект практически завершен, и переписывать на другой физический двиг мне кажется неправильно.


#16
13:11, 14 дек. 2013

Edisoni
Бааа. Сам недавно этим занимался. Ниже мои решения.
В интернетах нашел хорошую статью со сложным кодом, с примером на action script 3: http://www.emanueleferonato.com/2011/11/03/develop-a-flash-game-l… jectory-line/
Кратко об этой статье:
Смысл - фоновое обновление мира
1. запоминаем начальную позицию брошенного тела, "толкаем" тело,
2. обновляем только мир Box2d, чтобы Box2d обновлял позицию тела
3. запоминаем точки движения этого тела в цикле обновления Box2d,
4. заканчиваем обновление мира Box2d когда нужно
    4.1. (от себя, нету в статье ) можно добавить условия столкновения с препятствиями, и если столкнулось тело с препятствием - то заканчиваем обновлять мир
5. возвращаем тело в начальную позицию
Недостатки: если других тел много, для которых не нужно "предсказывать" траекторию, то необходимо перед "предсказыванием" запоминать их позицию, инерцию линейную, инерцию вращательную, угол, ..., и снова загружать перед "реальной симуляцией".
Собственная реализация на основе формул из физики, где необходимо подгонять траекторию полета тела под гравитацию, размеры тела, линейный дампинг и т.д. (т.е. простейшая симуляция брошенного тела во времени t; u, v - box2D.ApplyImpulse(u, v)):

action script 3
    private function setPredictiveTrajectory(x0:Number, y0:Number, u:Number, v:Number):void {
      predictiveTrajectory.graphics.clear();
      predictiveTrajectory.graphics.beginFill(0xFFFFFF);
      var g:Number = 0.0166*world.GetGravity().y;
      for (var t:Number = 0; t <= 100; t += 0.5){
        var y:Number = y0 + (v * t) + (g * t * t * 0.5);
        var x:Number = x0 + (u * t);        
        predictiveTrajectory.graphics.drawCircle(x, y, 1);
      }
      predictiveTrajectory.graphics.endFill();      
    }
Не до конца понял? Гугли "траектория полета предмета box2d" или "траектория полета предмета".

CasDev
> Но ИМХО проще будет другой движок приспособить, на bpx2d свет клином не
> сошелся.
А на каком движке сошелся?

#17
16:52, 14 дек. 2013

AntonioModer
> 1. запоминаем начальную позицию брошенного тела, "толкаем" тело,
> ...
> 5. возвращаем тело в начальную позицию

Чем отличается в box2d impulse от force?
1. Импульс превратится в force в следующем world_->step.
2. Нельзя взять (без ковыряния сырцов) импульс, приложенный к телу, и точку его приложения.

Отсюда вытекает, что п.5 не восстановит п.1 в исходном виде.
Хорошо, если все тела кроме бросаемого снаряда - статичны. А если к ним тоже приложены силы (ну, та же гравитация). Поэтому в-общем случае решение нежизнеспособно - по крайней мере в box2d.

>А на каком движке сошелся?
Я с физикой стараюсь дел не иметь )))
Но уверен, что есть движки, где данная задача решается достаточно просто - ведь необходимость в принципе есть.
Надо смотреть тот же chipmunk, а если он не подходит - bullet или что там сейчас популярно?

#18
17:40, 14 дек. 2013

CasDev
> Отсюда вытекает, что п.5 не восстановит п.1 в исходном виде.
Верно.
> Я с физикой стараюсь дел не иметь )))
> Но уверен, что есть движки, где данная задача решается достаточно просто - ведь
> необходимость в принципе есть.
> Надо смотреть тот же chipmunk, а если он не подходит - bullet или что там
> сейчас популярно?
Нечего тогда заявлять о том, чего не знаешь! >:|

#19
18:12, 14 дек. 2013

AntonioModer
> Нечего тогда заявлять о том, чего не знаешь! >:|
box2d, если не ошибаюсь, уже лет 7.
Я весьма сомневаюсь в том, что не появилось ни одного движка, где мир хотя бы не сериализуется без всяких танцев с бубном (или с него делается полный слепок), а это именно то, что нужно автору.

#20
22:40, 14 дек. 2013

CasDev
> box2d, если не ошибаюсь, уже лет 7.
> Я весьма сомневаюсь в том, что не появилось ни одного движка, где мир хотя бы
> не сериализуется без всяких танцев с бубном (или с него делается полный
> слепок), а это именно то, что нужно автору.
Все с тобой ясно, дальше спорить с тобой нет смысла. Бывай.

Страницы: 1 2
ПрограммированиеФорумОбщее

Тема в архиве.