Войти
Box2DФорумОбщее

Как закрепить тело по оси X?

#0
12:13, 12 июня 2015
Безымянный-1 | Как закрепить тело по оси X?


Имеются два динамических тел. Одно летит к другому под углом (шар к платформе). В то же время платформа движется вверх. После коллизии шар отскакивает, а платформа создает импульс по оси X и Y. То есть платформа опускается и перемещается немного вправо.

Мне нужно сделать, чтобы платформа создавала импульс по оси Y и в то же время оставалась по оси X.
Я хотел сделать так: проверять, если тело находиться больше или меньше заданной точки по оси X, то перемещать его в эту самую точку.
Но я не нашел метод, который мог бы это сделать. Есть ".setTransform(x, y, angle)", но мне нужен только X.

Буду рад любой подсказке.


#1
12:29, 12 июня 2015

Нельзя просто после коллизии выставлять скорость платформы по X в нужную тебе величину? В 0 тот же.

#2
12:48, 12 июня 2015

а призматик джойнтом платформу сделать не вариант? Или как было сказано выше - занулять скорость в апдейте

#3
12:52, 12 июня 2015
Нельзя просто после коллизии выставлять скорость платформы по X в нужную тебе величину? В 0 тот же.

Но как мне это сделать? Я не нашел метода, который как-то влиял именно на X.
#4
18:32, 12 июня 2015

41ST1K
VOsinski всё правильно тебе сказал, самый адекватный способ - joint.
http://www.iforce2d.net/b2dtut/joints-prismatic

Но если хочешь ставить координату X, то как-то так:

y = body.getPosition().y;
a= body.getAngle();
body.setTransform(x, y, a);

Изменять скорость:

body.setLinearVelocity(new Vec2( 0, body.getLinearVelocity().y ) );

#5
18:38, 12 июня 2015

Спасибо, опробую. А чем joint лучше двух других способов?

#6
13:48, 15 июня 2015

41ST1K
Джоинт лучше тем, что все взаимодействия тел будут корректно просчитываться движком. Призматик джоинт для того и нужен, чтобы ограничивать перемещение только по одной оси, в твоем случае, по Y.
А если координаты выставлять вручную, то могут вылезти неожиданные глюки.

Box2DФорумОбщее

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