Как правильно использовать маску категории Scenekit, маску столкновения и физическое тело, contactTestBitMask и создавать правильные столкновения? - PullRequest
0 голосов
/ 03 января 2019

Я пытался выучить набор сценариев и закончил одну книгу, но только часть обнаружения столкновений не понята, возможно, самая важная часть. Есть маска категории, маска сговора и физическое тело? .ContactTestBitMask.

Я хочу создать простую игру, чтобы получить это, но я застрял. Я не уверен, что понял идею.

В игре есть шар, который собирает жемчуг и держится подальше от камней и ям. В этом случае:

Категория масок:

  • ball = 0b0001
  • жемчуг = 0b0010
  • пород = 0b0100
  • отверстия = 0b1000

physicsBody .contactTestBitMask:

  • шар = жемчуг || камни // означает 0b1110
  • жемчуг = 1
  • пород = 1

Маски сговора равны 1, потому что все они сталкиваются друг с другом.

Я не уверен, что столкнулся с этой проблемой. Поэтому, прежде чем я начну писать код, я хотел быть уверен. В SCNPhysicsContactDelegate функция ниже решает, как узнать, когда они контактируют друг с другом:

physicsWorld(_ didBegin contact: _) {

var contactNode:SCNNode!
if contact.nodeA.name == "ball" {
 contactNode = contact.nodeB
 } else {
 contactNode = contact.nodeA
}

if contactNode.physicsBody?.categoryBitMask == 0b0010 {
 // mean pearls
 // raise score etc
}

if contactNode.physicsBody?.categoryBitMask == 0b0100 || 0b1000{
 if contactNode.name == "Rock" { print("You rocked") }
 if contactNode.name == "Hole" { print("You need to climb") }
}

}

Я искал youtube и стек, но есть только одно объяснение. Ссылка на стек Youtube видео не объясняют это. Примеры книг защищены авторским правом, поэтому я не могу их здесь разместить.

Спасибо, Хорошего дня.

1 Ответ

0 голосов
/ 05 января 2019

Вы не используете побитовые операторы. https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html

изменение

if contactNode.physicsBody?.categoryBitMask == 0b0100 || 0b1000

до

if contactNode.physicsBody?.categoryBitMask == 0b0100 | 0b1000

Сингл | и & являются правильными операторами, которые следует использовать для побитовых операций, подобных этим.

...