2013-11-25 2 views
1

я должен обнаружить столкновение между двумя SKSpriteNode (стены, человек), который является дочерним элементом SKNode фоне. background Узел является дочерним предприятием SKScene gameScene класс. Когда я хочу обнаружить столкновение, используя методОбнаружение столкновений между двумя SKSpriteNode в SpriteKit?

- (void) didBeginContact:(SKPhysicsContact *)contact { 
    SKPhysicsBody *firstBody, *secondBody; 

    if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) 
    { 
     firstBody = contact.bodyA; 
     secondBody = contact.bodyB; 
    } 
    else { 
     firstBody = contact.bodyB; 
     secondBody = contact.bodyA; 
    } 
    NSLog(@"contact happened"); 
} 

Но обнаружение столкновения не найдено. Пожалуйста помоги.

ответ

1

Вы, вероятно, имея один из двух вопросов:

  1. Вы не установили contactDelegate свойство вашего SKPhysicsWorld объекта.

  2. Вы не правильно установили свои разряды категории и контакта.

Вот как установить категорию и контакт тестовые биты:

#define kCategoryOne (1 << 0) 
#define kCategoryTwo (1 << 1) 

bodyA.categoryBitMask = kCategoryOne; 
bodyA.contactTestBitMask = kCategoryTwo; 

bodyB.categoryBitMask = kCategoryTwo; 
bodyB.contactTestBitMask = kCategoryOne; 
+0

Спасибо за ответ. SKPhysicsContactDelegate - несовместимый тип фона. Где мой фон - класс SKNode. self.physicsWorld.contactDelegate = self.prepareBackgroundObj; Здесь он показывает предупреждающее сообщение. – Banshi

+0

Вам нужно установить делегат контакта в зависимости от того, какой объект реализует метод 'didBeginContact', и вам нужно, чтобы объявление класса' @ interface' этого объекта включало протокол ' '. – godel9

+0

Использование #defines для категорий - плохой выбор, при этом вы теряете проверку типов. Лучше всего создать битовую маску с помощью NS_OPTIONS –

Смежные вопросы