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

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

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

Регистрация: Jun 2009
Сообщений: 42
Question Box2d, joints, etc.

доброго времени суток
кто хорошо знает Box2d - помогите, пожалуйсто.

есть маятник:

[IMG]http://img223.**************/img223/1923/22861726.jpg[/IMG]

как его добавить на сцену и физический мир в таком виде - я представляю
(один боди для груза, джоинт...)
но как его повернуть на заданный угл? весь маятник, относительно крепежа, например так:

[IMG]http://img223.**************/img223/1040/43299816.jpg[/IMG]

ещё вопрос
нить - джоинт является рисованным элементом
как обновлять её положение(на экране)? создавать для неё body?

спасиб за внимание, буду благодарен любым ответам по теме)


Последний раз редактировалось wvxvw; 06.07.2010 в 20:47.
Старый 12.06.2009, 22:09
maklaus вне форума Посмотреть профиль Отправить личное сообщение для maklaus Найти все сообщения от maklaus
  № 2  
Ответить с цитированием
maklaus

Регистрация: Nov 2008
Сообщений: 88
Цитата:
Сообщение от bugizavr Посмотреть сообщение
но как его повернуть на заданный угл? весь маятник, относительно крепежа, например так:

При создании b2DistanceJoint вам нужно задать 2 тела и 2 точки, так:
Код AS3:
distanceJointDef.Initialize(body1,body2,point1,point2);
joint=m_world.CreateJoint(distanceJointDef);
В вашем случае одним из тел будет шар, а другим m_ground (создайте его заранее m_ground=m_world.GetGroundBody(); )

Никаких проблем с поворотом маятника здесь нет, т.к. мы просто задаем 2 этих тела и 2 точки в глобальных координатах мира.

Если ваш вопрос заключается в том чтобы создать b2DistanceJoint из спрайта (линии на экране), что намного удобнее чем вбивать координаты руками, то вот как у меня это получилось:

Код AS3:
var distanceJointDef:b2DistanceJointDef=new b2DistanceJointDef();
var length:Number=_length;
var point1:b2Vec2=new b2Vec2(clip.x/m_physScale, clip.y/m_physScale);
var point2:b2Vec2=new b2Vec2((clip.x+length*Math.cos(clip.rotation*Math.PI/180))/m_physScale, 
(clip.y+length*Math.sin(clip.rotation*Math.PI/180))/m_physScale);
var body1:b2Body=GetBodyAtPoint(point1.x,point1.y);
var body2:b2Body=GetBodyAtPoint(point2.x,point2.y);
if(body1==null) body1=m_ground;
if(body2==null) body2=m_ground;
distanceJointDef.Initialize(body1,body2,point1,point2);
joint=m_world.CreateJoint(distanceJointDef);
где _length - фактическая длинна линии, а clip - это и есть спрайт линии

Здесь приходится идти на такую уловку - рисовать shape линии горизонтально, далее преобразуем её в символ clip и только потом поворачиваем в нужную позицию. Иным способом поворот линии у меня по крайней мере получить не удалось. Хотя можно использовать и более простой способ - рисовать линию всегда под "\" наклоном и использовать width и height спрайта:
Код AS3:
var point1:b2Vec2=new b2Vec2(clip.x/m_physScale, clip.y/m_physScale);
var point2:b2Vec2=new b2Vec2((clip.x+clip.width)/m_physScale, (clip.y+clip.height)/m_physScale);
Реализацию функции GetBodyAtPoint можно найти в доступном примере TestBed.


Цитата:
Сообщение от bugizavr Посмотреть сообщение
ещё вопрос
нить - джоинт является рисованным элементом
как обновлять её положение(на экране)? создавать для неё body?

спасиб за внимание, буду благодарен любым ответам по теме)

В доступном вместе с библиотекой Box2D примере TestBed в файле Test.as в закомментированном виде есть готовая функция DrawJoint. Её надо вызывать в Update следующим образом (в том же примере это также есть в комментариях):

Код AS1/AS2:
for (var jj:b2Joint = m_world.m_jointList; jj; jj = jj.m_next){
         DrawJoint(jj);
}

Старый 13.06.2009, 03:27
bugizavr вне форума Посмотреть профиль Отправить личное сообщение для bugizavr Найти все сообщения от bugizavr
  № 3  
Ответить с цитированием
bugizavr

Регистрация: Jun 2009
Сообщений: 42
maklaus, спасибо, хоть уже до этого сам додумался
единственное - я забыл Math.PI/180 в углах)

пишу игру...
выходит не всё так просто
для сложных объектов придётся выводить формулы - где что находится - не координаты же вбивать)
к тому же формулы основанные на углах, ведь в редакторе уровней мы можем повернуть этот сложный объект... мда

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

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
"выходит не всё так просто" мировая фраза.

Старый 13.06.2009, 13:22
maklaus вне форума Посмотреть профиль Отправить личное сообщение для maklaus Найти все сообщения от maklaus
  № 5  
Ответить с цитированием
maklaus

Регистрация: Nov 2008
Сообщений: 88
Если под сложными объектами вы имеете ввиду неправильные многоугольники то рекомендую вам Box2d Flash World Construction Kit. После установки у вас в меню Commands появится команда Polygon Decomposition - Get Points. А дальше все просто - выделяете многоугольник (Shape) любой сложности, нажимаете Get Points и в Output вываливается массив координат (например [[[313.05, -53], [313.05, -41], [-301.95, -47], [-301.95, -54]], [[-301.95, -47], [313.05, -41], [182.55, -40.5], [-306.95, -47]], [[-306.95, 53], [-306.95, -47], [-91.95, 3], [-91.5, 53.5]], [[-91.95, 3], [-306.95, -47], [-71.95, -17]], [[-71.95, -17], [-306.95, -47], [182.55, -40.5], [58.05, -17]], [[78.05, 29], [78.05, 3], [117.05, 29]], [[78.05, 3], [58.05, -17], [182.55, -40.5], [117.05, 29]]]). Где массив самого высокого уровня (неправильный многоугольник) содержит массивы (правильные многоугольники), которые в свою очередь содержат массивы точек. А далее спокойно используете его в своих корыстных целях. =)

Старый 20.06.2009, 01:18
bugizavr вне форума Посмотреть профиль Отправить личное сообщение для bugizavr Найти все сообщения от bugizavr
  № 6  
Ответить с цитированием
bugizavr

Регистрация: Jun 2009
Сообщений: 42
maklaus
благодарю

есть ещё один вопрос
как вращать груз относительно крепежа с желаймой скоростью?

Старый 20.06.2009, 01:23
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 7  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
оффтоп: как ужасно выглядит код b2!
__________________
Отряд Котовскага

Старый 20.06.2009, 01:43
bugizavr вне форума Посмотреть профиль Отправить личное сообщение для bugizavr Найти все сообщения от bugizavr
  № 8  
Ответить с цитированием
bugizavr

Регистрация: Jun 2009
Сообщений: 42
думаю мою задачу можно решить хитрее
крепёж можно заменить прямоугольником
и к краю прямоугольника крепить дистанс джоинт
а револют джоинт между землёй и крепежём - вращать
как здесь http://www.emanueleferonato.com/2009...ints/#more-955

такой вариант мне не нравится


Последний раз редактировалось bugizavr; 20.06.2009 в 01:50.
Старый 06.07.2010, 20:36
Yurbalife вне форума Посмотреть профиль Отправить личное сообщение для Yurbalife Найти все сообщения от Yurbalife
  № 9  
Ответить с цитированием
Yurbalife

Регистрация: Jul 2009
Сообщений: 14
Сделал маятник c distanceJoint. Тело, к которому крепится маятник, я перемещаю с помощью мыщи. Но при перемещении все начинает дергаться, и только когда прекращаешь водить мышкой. Тогда все вроде начинает приходить в норму. А мне нужно с помощью мышки раскручивать маятник. Подскажите, пожалуйста, в чем моя проблема?
Вложения
Тип файла: swf пример1.swf (61.8 Кб, 159 просмотров)

Старый 06.07.2010, 23:42
Yurbalife вне форума Посмотреть профиль Отправить личное сообщение для Yurbalife Найти все сообщения от Yurbalife
  № 10  
Ответить с цитированием
Yurbalife

Регистрация: Jul 2009
Сообщений: 14
Вроде исправил, но раскрутить маятник мышкой не удается. Изменяю частоту, тогда он начинает раскручиваться, но не реалистично. Скажите, быть может DistаnсеJоint не подходит для этой цели?

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

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

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


 


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


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