iPhone cocos2d box2d обнаружение столкновения с телом без применения силы

Пишу игру Cocos2D box2d для iPhone. У меня два динамических тела, и я надеюсь, что к ним применяется сила извне, но они не применяют силу друг к другу и не обнаруживают их столкновение. Как я могу этого добиться?

И также я надеюсь, что они вместе переместятся в одну и ту же позицию после столкновения. Как я могу это сделать?


person ttotto    schedule 12.08.2012    source источник
comment
Я не уверен, о чем вы спрашиваете. Вам, вероятно, следует подумать о том, чтобы переписать это или добавить больше содержания к вопросу.   -  person Andres C    schedule 17.08.2012


Ответы (2)


они не применяют силу друг к другу и обнаруживают свое столкновение

Похоже, вы могли бы захотеть посмотреть на фильтрацию столкновений. В этом ответе есть фрагмент кода, который динамически изменяет индекс фильтрации столкновений тела https://stackoverflow.com/a/11283206/735204

они перемещаются вместе в одном и том же положении после столкновения

Наверное, какой-то стык (например, сварной?)

Из руководства: http://www.box2d.org/manual.html

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

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

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

person Emmett Butler    schedule 17.08.2012
comment
но я их уже знаю. 1. Если я использую биты разных категорий и биты масок, как я могу обнаружить их столкновение? 2. Я уже пробовал использовать дистанционное соединение, но иногда положение спрайта отличается от положения его тела. Так что иногда они разделяются. - person ttotto; 17.08.2012
comment
о - для обнаружения столкновения без реакции тел на столкновение используйте датчик iforce2d.net/ b2dtut / датчики - person Emmett Butler; 17.08.2012
comment
Вы намеренно меняете положение спрайта и положение тела? - person Emmett Butler; 18.08.2012

Извините за последний ответ, просто проверяю, могу ли я его написать.

Что насчет этого?

bodyDef.isSensor = true;

и используйте ContactListener для обнаружения столкновения. Box2d для обнаружения столкновений

Также вы можете использовать фильтры box2d. Например:

ПОМНИТЕ: если groupIndex ‹0, одни и те же тела никогда не сталкиваются друг с другом. Это то, что вам нужно.

b2Filter bodyFilter;
 bodyFilter.groupIndex = -1; 
 bodyFilter.categoryBits = 0x0002;



 fixtureDef.filter = bodyFilter;
person flowmachine1    schedule 05.07.2014