Войти
Box2DФорумОбщее

Удар персонажем

#0
19:05, 12 дек. 2013

Стала задача реализации ударов персонажами. Как сделать чтоб с тела выдвигалась типа руки по нажатию кнопки? Вообще возможно сделать сложное тело типа с 2 частей, 2 часть которого управляемая на смещение относительно основного тела?


#1
19:59, 12 дек. 2013

Уверен, что тебе нужна рука именно как физическое тело?

#2
22:33, 12 дек. 2013

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

#3
7:45, 13 дек. 2013

Вообще можно, но это все будет криво, придется с инерцией бороться. Эта рука будет перса колбасить, если сильно дергается. Согласен с RPGman, нафига? Сделай применение силы или импульса ко всем объектам кроме перса в нужной области по нажатию.

#4
8:40, 13 дек. 2013

Snorkasnork
> Сделай применение силы или импульса ко всем объектам кроме перса в нужной
> области по нажатию.
+1 самый достойный вариант
Я уже пытался сделать вылет кулака у игрока, чтоб стену расшибать например, там очень точно настраивать надо, так как на движение игрока сильно эти манипуляции влияют (платформер)

#5
11:10, 13 дек. 2013

Все спасибо за советы, помогли правильный путь выбрать. Правда еще незнаю как реализовать правильно отлов объектов в ограниченой области перед героем. Может есть у кого примерчик какой? Или тупо начитывать лист всех тел в мире и проверять их координаты по сравнению с героем?

#6
11:51, 13 дек. 2013

Воу-воу, полегче. Есть пара способов.
Самый адекватный на мой взгляд - создать сенсор (или два, с двух сторон по одному).
Отлавливаешь контакты и применяешь силу. Нужно использовать прослушиватель контактов http://www.gamedev.ru/community/box2d/forum/?id=157363.
Ну, если хочется извращений, то подойдет .querryAABB метод физического мира (world), отлавливающий объекты в заданной прямоугольником (ААВВ) зоне. Но там еще придется callback описать. Это не сложно, в принципе.

#7
12:42, 13 дек. 2013

Сенсоры мне нравится идея, действительно че-то не подумал - оставлю ее на закуску. С контактЛистером знаю как работать спс. Щас на быструю реализовал метод который работает:

        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 :)

#8
19:30, 13 дек. 2013

http://www.emanueleferonato.com/2011/12/08/create-real-explosions-with-box2d/

http://www.emanueleferonato.com/2012/01/17/create-real-explosions… ing-textures/

#9
20:59, 13 дек. 2013

Velocity это не сила, это скорость. Если ты действительно двигаешь их, устанавливая им скорость, то никакая сила или импульс не смогут изменить ее. Правильнее двигать силой или импульсом, кому как нравится. Если силой, то тела будут как бы разгоняться. При этом нужно ограничивать скорость в обоих случаях.
Для твоего случая (скорость константа, обновляется каждый ход) можешь попробовать отключать (не устанавливать скорость) нпс, когда он получил удар, а потом включать через определенное время. Будет отлетать, приходить в себя и двигаться дальше.

#10
13:22, 14 дек. 2013

Спс всем. Да реально линейная скорость перекрывала импульс. Всем спасибо, помогли!

#11
16:53, 14 дек. 2013

Wells77
> Есть мысля конечно делать вылет пули на ограниченное растояние (на вытянутую
> руку персонажа например).
Извращенец.

#12
23:49, 16 дек. 2013

Че-то неочень с сенсорами получается. 2 боковых сенсора почему-то утяжелили тело в 2 раза, хоть плотность их выставлена в 0. Потом ссылки законтаченых тел с сенсорами начитываю в публичный статик масив и пробую их очищать с этого масива при окончании контакта, но как-то некоректно удаляются они с этого масива. Может кто накатать побыстрому свой пример 2 процедур контактЛистенера при заполнении масива законтаченых тел и его удалении ссылки тела с него при окончании контакта?

#13
11:14, 17 дек. 2013

Что то не понятно что вы хотите сделать тогда вообще, по идее зачем вам постоянные сенсоры если вам нужна эмуляция удара, то есть например у вас бежит перс и вы хотите и ударить, нажимаете доспустим кнопку мыши для удара, при этом в расчетном месте удара создаете сенсор, определяете все тела которые туда попали и раздаете им необходимые импульсы. Зачем постоянные сенсоры таскать с собой?

#14
11:24, 17 дек. 2013

Вот, действительно тоже вариант. Тоесть каждый раз при нажатии кнопки удара создавать тело сенсора впереди персонажа, получить список тел соприкосаемых с этим сенсором и сразу удалить тело. Вопрос - как опредилить в этот момент список тел соприкасаемых с сенсором? Всеравно как я понимаю в контакт листенере нада вводить статик паблик масив и начитывать в него соприкасаемые тела с сенсором и удалять ссылки с этого массива по окончании контакта. Не много-ли танцев с бубном если можна было просто использовать 4 строчки кода описаных мною выше (использовать Бодилист )?

Box2DФорумОбщее

Тема в архиве.