PDA

Просмотр полной версии : [Box2D] Перемещение объекта


imdogma
08.01.2010, 22:01
Подскажите, как можно перемещать предмет в Box2d? Стоит задача двигать главгероя игры. SetLinearVelocity не подходит тк произходит некое "скольжение" при остановке объекта. Какие способы еще могут быть?

Division
08.01.2010, 22:58
ApplyForce юзай.
Скольжение по идее и должно быть, тела как правило мгновенно не останавливаются. Можешь попробовать LinearDamping подкрутить.

imdogma
08.01.2010, 23:22
ApplyForce юзай.
Скольжение по идее и должно быть, тела как правило мгновенно не останавливаются. Можешь попробовать LinearDamping подкрутить.

Спасибо, сейчас попробую :drinks:

Добавлено через 12 минут
чтото объект начинает перемещаться вперед, при этом делая безумные сальто вперед :))) Точку приложения беру середину объекта
делаю так:

GameObject(_playerObject).objectBody.ApplyForce(new b2Vec2(100 / Physics.RATIO, 0), new b2Vec2((GameObject(_playerObject).objectSprite.width / 2) / Physics.RATIO, (GameObject(_playerObject).objectSprite.height / 2) / Physics.RATIO));

Чтоб было понятно, что есть что:
Physics.RATIO = 30, указываю ее для удобства переовода пикселей в метры.
GameObject - общий для всех игровых объектов класс, от него наследую подклассы для более конкретных объектов. В нем храню b2body и спрайт каждого объекта

Division
09.01.2010, 00:18
Изврат полнейший.
Во-первых если не хочешь чтобы тело вращалось вообще, используй fixedRotation.
Во-вторых если хочешь приложить силу к центру тела, юзай GetPosition(), а не то что ты написал. Ты прикладываешь силу к координатам половины высоты и ширины объекта, следовало бы прибавить координаты по x и y.
Далее, ты зачем-то преобразовываешь из координат экранных в физические - полный изврат, все расчёты должны проводиться в координатах физики и переводиться в экранные только для отрисовки и позиционирования спрайтов.

imdogma
09.01.2010, 01:19
Далее, ты зачем-то преобразовываешь из координат экранных в физические
Перевожу только потому, что мне так понятнее и нагляднее. Насколько я знаю, в box2d 1 метр = 30 пикселей, поэтому в итоге я и передаю нормальные для движка значения и он с ними работает нормально как с метрами. Насчет fixedRotation - спасибо попробую. Еще почитал, с массой вроде можно поэксперементировать

Division
09.01.2010, 11:33
Перевожу только потому, что мне так понятнее и нагляднее
Понятнее это когда у тебя вся работа проходит в координатах физики, я серьёзно.
в box2d 1 метр = 30 пикселей
Не правда, 1 метр к пикселям никак не привязан, ты сам выбираешь подходящий коэфициент.