![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 14
|
Здравствуйте! Возможно это уже обсуждалось, но полистав форум и погуглив ответа не нашла.
Я создала тело и хочу перемещать его по координатам мыши (т.е при клике, тело должно медленно и уверенно ползти в нужную точку) с заданной мной скоростью. Проблема возникла, когда я решила это сделать вручную при помощи SetPosition(). Объект двигался, но игнорировал все законы физики. Но когда я попыталась использовать импульс, тело стало совсем неуправляемым. Я не знаю как сбавить скорость, чтобы тело остановилось в нужной мне точке. Вектора возвращаются в метрах, а координаты в пикселях. Насколько могу судить преобразование одного в другое очень условно, отчего результат тоже неприемлемый. _force = new b2Vec2(0, 0); _bodypos = body.GetPosition(); _dist = new Point((_mousePoint.x - _bodypos.x), (_mousePoint.y - _bodypos.y)); _force.Add( new b2Vec2(_dist.x, _dist.y); a = Math.atan2((_mousePoint.y - _bodypos.y) , (_mousePoint.x - _bodypos.x)) var b_angle:b2Mat22 = new b2Mat22(); b_angle.Set(a); var b_transform:b2Transform = new b2Transform(_bodypos, b_angle); body.SetTransform(b_transform); body.ApplyImpulse(_force, _bodypos); |
|
|||||
|
Чтобы тело двигалось "медленно но уверенно" - надо делать не applyImpulse(), а applyForce()
Импульс от времени не зависит, он единоразово применяется, это как удар по телу, импульсом можно эмулировать удар ракеткой по мячу к примеру, или взрыв. А для вашего примера нужна именно сила. и какой-то цикл типа: Ну скорее не в цикле а по ентер_фрейму это делать надо будет циклически. Ну а перевод метров в пиксели это отдельная тема. Лучше ввести какую-то константу коеффициент или как-то так. Вот мои параметры из текущего проекта. //draw levels public const ITERATIONS : int = 50;//тут понятно, параметры настройки мира и разрешение public const TIME_STEP : Number = 1.0/60.0; public const SCREEN_WIDTH : int = 640; public const SCREEN_HEIGHT : int = 480; public const COEF : Number = 0.7;//это собственно и есть этот коэффициент, у вас он может быть другим
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 14
|
Спасибо за ответ) почти поняла, да не совсем) Не могли бы вы по подробнее про коэффициент рассказать? Что он делает и для чего? Во всех примерах, что мне попадались была константа 1/30 и потом все формулы делились на нее.
|
|
|||||
|
С коефициентом как раз вопорсов меньше всего
![]() Цитата:
А 1/30 - это один "тик" времени физического мира, у меня он 1/60. В хелпе по бокс2д это есть, эта константа задает частоту обновления для физики. вот кстати хелп, русский.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 14
|
теперь все стало на свои места, спасибо огромное)) с меня пиво
![]() русский хелп по старой версии, а в новой достаточно изменений, просто уже запуталась что где)) со временем все утрясется ![]() |
|
|||||
|
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 14
|
эт громко сказано)) но пиво дааа) наше все
![]() Добавлено через 42 часа 20 минут хм, все как бы верно, но при applyForce(), тело игнорирует физику, игнорирует объекты, которые должны быть препятствиями, тело проходит сквозь них и не замечает. ![]() что я упускаю? Последний раз редактировалось coolsiu; 17.01.2011 в 20:41. |
|
|||||
|
Если вы пользуете бокс версии 2.1а - то там такие глюки бывают. С этим ниче не поделаешь, разве что править сами классы бокса.
В 2.0.2 таких проблем вроде бы не было. Я не знаю что там у вас за структура, но есть мулька такая как деление объектов на группы. физ-законы действуют только в пределах одной группы (ну они на все группы действуют, это что-то типа z-индекса получается, разные группы не пересекаются). Только чтобы этот механизм задействовать нужно было его сознательно подключать, а потом что-то напутать ![]() Я бы на код ваш глянул, а то так сложно сказать, я не гуру бокса, потому сразу однозначно сказать по симптомам не могу.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 14
|
да да) я как раз на это вышла)) спасибо) вы мне очень помогли
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|