2015-12-14 1 views
0

Мне удалось переместить тело в определенную точку, изменив его state.pos и его state.old.pos. Но он, кажется, теряет свою скорость (и, по-моему, ускорение).Перемещение тела путем изменения его положения с помощью PhysicsJS

Делать это так:

ship.body.state.pos.x = -context.width/2 - ship.radius; 
ship.body.state.old.pos.x = -context.width/2 - ship.radius; 

Есть ли лучший способ сделать это? Как я могу изменить свое положение и сохранить все остальное одинаково?

Есть ли что-нибудь в документации? Я не смог его найти.

ответ

-1

Я нашел решение. Я не прошел через весь источник, но имел некоторый опыт работы с интеграторами Physicsjs (https://coderwall.com/p/ntb6bg/metres-seconds-and-newtons-in-physicsjs). Я начал думать, что они могут быть причиной моей проблемы.

Таким образом, по-видимому, интеграл по вертям по умолчанию используется для моделирования Physicsjs. Я использовал его раньше, и это здорово. Но интегратор верблов использует предыдущую позицию для вычисления следующей позиции (нет простого положения, это немного сложнее, чем это), поэтому ее изменение вручную закручивает. ЧТО Я не знаю, как «исправить», или если это возможно. Но есть и другой способ.

В моем случае то, что у меня есть, представляет собой простое моделирование ньютоновских моделей без фантастических вещей или сумасшедших значений (я использую здесь технические термины ...), поэтому интегратор эйлеров работал просто отлично, и поскольку он не использует предыдущее положение для вычисления следующий он идеально подходит для «teletransport» мои объекты без потери скорости, направление и т.д.

Только не забудьте загрузить интегратор:

void function (define) { 'use strict'; define( [ 'physicsjs', 'physicsjs/behaviors/attractor', 'physicsjs/behaviors/body-collision-detection', 'physicsjs/behaviors/sweep-prune', 'physicsjs/bodies/circle', 'physicsjs/integrators/improved-euler' ], physicsModule ); // function physicsModule(physics) { return physics; } }(define);

И не забудьте добавить интегратор к моделированию:

void function (define) { 'use strict'; define( [ 'physics' ], simulationModule ); // function simulationModule(physics) { var simulation = physics(); simulation.add(physics.behavior('body-collision-detection')); simulation.add(physics.behavior('sweep-prune')); simulation.add(physics.integrator('improved-euler')); return simulation; } }(define);

1

Вы перемещаете оба положения в одно и то же фиксированное положение. Таким образом, скорость равна нулю.

Вы должны перемещать оба положения на одинаковое расстояние, чтобы расстояние между ними сохранялось.

+0

Интересные взять. Я буду смотреть в него. Спасибо. – slacktracer