У меня есть два разных фиксированных SKPhysicsBody в SKScene. Единственная разница между ними - их categoryBitMask. Один имеет categoryBitMask 512, другой 1024.Как определить тело и тело B в SKPhysicsContact?
static const u_int32_t kWallCategory = 0x1 << 9; //512
static const u_int32_t kStructureCategory = 0x1 << 10; //1024
В моей программе, у меня есть стандартный контакт обработчик вызывается из -(void)didBeginContact:(SKPhysicsContact *)contact
, который начинается:
-(void)handleContact:(SKPhysicsContact*)contact {
SKPhysicsBody *bodyA = contact.bodyA;
SKPhysicsBody *bodyB = contact.bodyB;
int type1 = contact.bodyA.categoryBitMask;
int type2 = contact.bodyB.categoryBitMask;
В моей программе, мне нужно, чтобы определить контактного вектора между динамическим телом и одним из двух неподвижных тел. Для того, чтобы сделать это, я получить доступ к свойству contactNormal в SKPhysicsContact
CGVector c = contact.contactNormal;
То, что я заметил, однако, в том, что контактные векторы были непоследовательными и я решил это потому, что иногда Боде из SKPhysicsContact был неподвижное тело, иногда bodyA было динамическим телом.
Например, когда пуля (динамическое тело) попадает в здание (неподвижное тело) слева, я хочу, чтобы контактный вектор был (-1,0)
каждый раз. В настоящее время контактным вектором является иногда (-1,0)
(слева), а иногда (1,0)
(справа) все в зависимости от того, какой корпус contact.bodyA
есть.
Мой вопрос: учитывая, что все остальное равно (свойства физики и т. Д.), Что определяет, что такое bodyA и что является bodyB в SKPhysicsContact?
Это здорово. Ваш вывод о том, что нужно всегда проверять, какое именно тело (при условии, что это важно для того, что делает ваш обработчик контактов), но есть проблема на этом пути: причина всегда проверять не то, что трудно контролировать, какие органы порядка войдите в сцену. Apple не обещает, что тела A и B будут в * любом * детерминированном порядке - вы скорректировали его на порядок создания, но нет никакой гарантии, что это будет одинаково для всех устройств и версий ОС. – rickster