Стала задача реализации ударов персонажами. Как сделать чтоб с тела выдвигалась типа руки по нажатию кнопки? Вообще возможно сделать сложное тело типа с 2 частей, 2 часть которого управляемая на смещение относительно основного тела?
Уверен, что тебе нужна рука именно как физическое тело?
Есть мысля конечно делать вылет пули на ограниченное растояние (на вытянутую руку персонажа например). Под наложеным мувиком анимации удара это будет незаметно, но хз или верный путь. Или как-то джоинтами прицепить выдвижную часть к основному телу. А кто как делал подобное? или нету таких?
Вообще можно, но это все будет криво, придется с инерцией бороться. Эта рука будет перса колбасить, если сильно дергается. Согласен с RPGman, нафига? Сделай применение силы или импульса ко всем объектам кроме перса в нужной области по нажатию.
Snorkasnork
> Сделай применение силы или импульса ко всем объектам кроме перса в нужной
> области по нажатию.
+1 самый достойный вариант
Я уже пытался сделать вылет кулака у игрока, чтоб стену расшибать например, там очень точно настраивать надо, так как на движение игрока сильно эти манипуляции влияют (платформер)
Все спасибо за советы, помогли правильный путь выбрать. Правда еще незнаю как реализовать правильно отлов объектов в ограниченой области перед героем. Может есть у кого примерчик какой? Или тупо начитывать лист всех тел в мире и проверять их координаты по сравнению с героем?
Воу-воу, полегче. Есть пара способов.
Самый адекватный на мой взгляд - создать сенсор (или два, с двух сторон по одному).
Отлавливаешь контакты и применяешь силу. Нужно использовать прослушиватель контактов http://www.gamedev.ru/community/box2d/forum/?id=157363.
Ну, если хочется извращений, то подойдет .querryAABB метод физического мира (world), отлавливающий объекты в заданной прямоугольником (ААВВ) зоне. Но там еще придется callback описать. Это не сложно, в принципе.
Сенсоры мне нравится идея, действительно че-то не подумал - оставлю ее на закуску. С контактЛистером знаю как работать спс. Щас на быструю реализовал метод который работает:
for (var bodiesList:b2Body = Box2DHelpers.world.GetBodyList(); bodiesList; bodiesList = bodiesList.GetNext()) { var position:b2Vec2 = bodiesList.GetPosition(); if ((position.x>_heroCircle.GetWorldCenter().x) && (position.x<_heroCircle.GetWorldCenter().x+3)) { bodiesList.ApplyImpulse(new b2Vec2(15.0, -15.0),bodiesList.GetPosition()); } }
Но вот беда, какого-то импульс применяется к встречным телам только по оси У и ничего не дает по Х. Встречные тела динамически двигаются по Х с силой 2 (linearVelocityNPC=2). Почему по Х импульс не срабатывает?
Кстати, спасибо всем, пока единственное норм место где с кем-то можно пообщатся о Box2d :)
http://www.emanueleferonato.com/2011/12/08/create-real-explosions-with-box2d/
http://www.emanueleferonato.com/2012/01/17/create-real-explosions… ing-textures/
Velocity это не сила, это скорость. Если ты действительно двигаешь их, устанавливая им скорость, то никакая сила или импульс не смогут изменить ее. Правильнее двигать силой или импульсом, кому как нравится. Если силой, то тела будут как бы разгоняться. При этом нужно ограничивать скорость в обоих случаях.
Для твоего случая (скорость константа, обновляется каждый ход) можешь попробовать отключать (не устанавливать скорость) нпс, когда он получил удар, а потом включать через определенное время. Будет отлетать, приходить в себя и двигаться дальше.
Спс всем. Да реально линейная скорость перекрывала импульс. Всем спасибо, помогли!
Wells77
> Есть мысля конечно делать вылет пули на ограниченное растояние (на вытянутую
> руку персонажа например).
Извращенец.
Че-то неочень с сенсорами получается. 2 боковых сенсора почему-то утяжелили тело в 2 раза, хоть плотность их выставлена в 0. Потом ссылки законтаченых тел с сенсорами начитываю в публичный статик масив и пробую их очищать с этого масива при окончании контакта, но как-то некоректно удаляются они с этого масива. Может кто накатать побыстрому свой пример 2 процедур контактЛистенера при заполнении масива законтаченых тел и его удалении ссылки тела с него при окончании контакта?
Что то не понятно что вы хотите сделать тогда вообще, по идее зачем вам постоянные сенсоры если вам нужна эмуляция удара, то есть например у вас бежит перс и вы хотите и ударить, нажимаете доспустим кнопку мыши для удара, при этом в расчетном месте удара создаете сенсор, определяете все тела которые туда попали и раздаете им необходимые импульсы. Зачем постоянные сенсоры таскать с собой?
Вот, действительно тоже вариант. Тоесть каждый раз при нажатии кнопки удара создавать тело сенсора впереди персонажа, получить список тел соприкосаемых с этим сенсором и сразу удалить тело. Вопрос - как опредилить в этот момент список тел соприкасаемых с сенсором? Всеравно как я понимаю в контакт листенере нада вводить статик паблик масив и начитывать в него соприкасаемые тела с сенсором и удалять ссылки с этого массива по окончании контакта. Не много-ли танцев с бубном если можна было просто использовать 4 строчки кода описаных мною выше (использовать Бодилист )?
Тема в архиве.