Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.01.2011, 00:09
coolsiu вне форума Посмотреть профиль Отправить личное сообщение для coolsiu Найти все сообщения от coolsiu
  № 1  
Ответить с цитированием
coolsiu
 
Аватар для coolsiu

Регистрация: Jan 2010
Адрес: Киев
Сообщений: 14
Question Перемещение тела по заданным координатам

Здравствуйте! Возможно это уже обсуждалось, но полистав форум и погуглив ответа не нашла.
Я создала тело и хочу перемещать его по координатам мыши (т.е при клике, тело должно медленно и уверенно ползти в нужную точку) с заданной мной скоростью. Проблема возникла, когда я решила это сделать вручную при помощи SetPosition(). Объект двигался, но игнорировал все законы физики. Но когда я попыталась использовать импульс, тело стало совсем неуправляемым. Я не знаю как сбавить скорость, чтобы тело остановилось в нужной мне точке. Вектора возвращаются в метрах, а координаты в пикселях. Насколько могу судить преобразование одного в другое очень условно, отчего результат тоже неприемлемый.

Код AS3:
_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);
Не жду готового ответа, сойдет пинок в нужное направление поиска. Заранее спасибо!

Старый 16.01.2011, 00:33
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 2  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Чтобы тело двигалось "медленно но уверенно" - надо делать не applyImpulse(), а applyForce()

Импульс от времени не зависит, он единоразово применяется, это как удар по телу, импульсом можно эмулировать удар ракеткой по мячу к примеру, или взрыв. А для вашего примера нужна именно сила.

и какой-то цикл типа:
Код AS3:
while(позиция_тела != нужная_позиция) {
    body.ApplyForce(force, pos)
}
Ну скорее не в цикле а по ентер_фрейму это делать надо будет циклически.

Ну а перевод метров в пиксели это отдельная тема. Лучше ввести какую-то константу коеффициент или как-то так.

Вот мои параметры из текущего проекта.
Код AS3:
//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;//это собственно и есть этот коэффициент, у вас он может быть другим
Коэффициент вычислялся эмпирическим путем)) В дальнейшем все формулы умножаются/делятся на него.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 16.01.2011, 00:50
coolsiu вне форума Посмотреть профиль Отправить личное сообщение для coolsiu Найти все сообщения от coolsiu
  № 3  
Ответить с цитированием
coolsiu
 
Аватар для coolsiu

Регистрация: Jan 2010
Адрес: Киев
Сообщений: 14
Спасибо за ответ) почти поняла, да не совсем) Не могли бы вы по подробнее про коэффициент рассказать? Что он делает и для чего? Во всех примерах, что мне попадались была константа 1/30 и потом все формулы делились на нее.

Старый 16.01.2011, 00:55
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 4  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
С коефициентом как раз вопорсов меньше всего

Цитата:
Вектора возвращаются в метрах, а координаты в пикселях. Насколько могу судить преобразование одного в другое очень условно, отчего результат тоже неприемлемый.
Вот коэффициент это единожды вычисленное соотношение расстояния в метрах, к расстоянию в пикселах.

А 1/30 - это один "тик" времени физического мира, у меня он 1/60.
В хелпе по бокс2д это есть, эта константа задает частоту обновления для физики.

вот кстати хелп, русский.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 16.01.2011, 02:11
coolsiu вне форума Посмотреть профиль Отправить личное сообщение для coolsiu Найти все сообщения от coolsiu
  № 5  
Ответить с цитированием
coolsiu
 
Аватар для coolsiu

Регистрация: Jan 2010
Адрес: Киев
Сообщений: 14
теперь все стало на свои места, спасибо огромное)) с меня пиво
русский хелп по старой версии, а в новой достаточно изменений, просто уже запуталась что где)) со временем все утрясется

Старый 16.01.2011, 02:14
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 6  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Девушка-программист, пиво, надо же))) Мухаха))
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 16.01.2011, 02:21
coolsiu вне форума Посмотреть профиль Отправить личное сообщение для coolsiu Найти все сообщения от coolsiu
  № 7  
Ответить с цитированием
coolsiu
 
Аватар для coolsiu

Регистрация: Jan 2010
Адрес: Киев
Сообщений: 14
эт громко сказано)) но пиво дааа) наше все

Добавлено через 42 часа 20 минут
хм, все как бы верно, но при applyForce(), тело игнорирует физику, игнорирует объекты, которые должны быть препятствиями, тело проходит сквозь них и не замечает.

что я упускаю?


Последний раз редактировалось coolsiu; 17.01.2011 в 20:41.
Старый 19.01.2011, 00:33
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 8  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Если вы пользуете бокс версии 2.1а - то там такие глюки бывают. С этим ниче не поделаешь, разве что править сами классы бокса.

В 2.0.2 таких проблем вроде бы не было. Я не знаю что там у вас за структура, но есть мулька такая как деление объектов на группы. физ-законы действуют только в пределах одной группы (ну они на все группы действуют, это что-то типа z-индекса получается, разные группы не пересекаются).

Только чтобы этот механизм задействовать нужно было его сознательно подключать, а потом что-то напутать

Я бы на код ваш глянул, а то так сложно сказать, я не гуру бокса, потому сразу однозначно сказать по симптомам не могу.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 19.01.2011, 00:36
coolsiu вне форума Посмотреть профиль Отправить личное сообщение для coolsiu Найти все сообщения от coolsiu
  № 9  
Ответить с цитированием
coolsiu
 
Аватар для coolsiu

Регистрация: Jan 2010
Адрес: Киев
Сообщений: 14
да да) я как раз на это вышла)) спасибо) вы мне очень помогли

Старый 19.01.2011, 00:36
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 10  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Судя по коду у вас таки 2.1а, у 2.0.2 нету метода SetTransform()
__________________
Кто к нам с чем для чего - тот у нас того от того.

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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