Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Box2D] Перемещение объекта (http://www.flasher.ru/forum/showthread.php?t=134727)

imdogma 08.01.2010 22:01

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

Division 08.01.2010 22:58

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

imdogma 08.01.2010 23:22

Цитата:

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

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

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

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

Цитата:

Сообщение от Division (Сообщение 877661)
Далее, ты зачем-то преобразовываешь из координат экранных в физические

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

Division 09.01.2010 11:33

Цитата:

Перевожу только потому, что мне так понятнее и нагляднее
Понятнее это когда у тебя вся работа проходит в координатах физики, я серьёзно.
Цитата:

в box2d 1 метр = 30 пикселей
Не правда, 1 метр к пикселям никак не привязан, ты сам выбираешь подходящий коэфициент.


Часовой пояс GMT +4, время: 08:04.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.