func didBeginContact(contact: SKPhysicsContact) {
if (contact.bodyA.categoryBitMask & BodyType.shield.rawValue) == BodyType.shield.rawValue {
contact.bodyB.node?.removeFromParent()
counter++
println(counter)
} else if (contact.bodyB.categoryBitMask & BodyType.shield.rawValue) == BodyType.shield.rawValue {
contact.bodyA.node?.removeFromParent()
counter++
println(counter)
}
}
Un corpo fisica è da una trama shield.physicsBody = SKPhysicsBody(texture: shieldTexture, size: shieldTexture.size())
didBeginContact viene chiamato più volte per lo stesso SKPhysicsBody
l'altro da un cerchio sand.physicsBody = SKPhysicsBody(circleOfRadius: sand.size.width/2)
Quando il rimorchio oggetti contatto tra loro talvolta sand.physicsBody = SKPhysicsBody(circleOfRadius: sand.size.width/2)
viene chiamato più volte. Come faccio a ottenere di essere chiamato solo una volta per ogni oggetto, anche se lo rimuovo dal genitore non appena entra in contatto.
Credo che questo funzioni come previsto poiché il corpo dalla trama può generare più forme internamente, ciascuna può causare un evento di contatto. La rimozione del nodo non rimuove il corpo fino a quando la fase di simulazione fisica non è terminata. È necessario "contrassegnare" manualmente il nodo o il corpo come elaborati in questo evento di contatto in modo da poter saltare eventuali eventi di contatto successivi degli stessi corpi. – LearnCocos2D
Vorrei che ci fosse un'opzione per SKPhysicsBody dalla texture per impostarlo tramite parametro, quindi si comporta esattamente come ad es. SKPhysicsBody da circleOfRadius quindi conta SOLO 1 colpo/contatto in alcuni casi che sarebbe molto desiderato rispetto alla creazione di qualsiasi logica aggiuntiva, inclusa la risposta di seguito. Inoltre, potrebbe risparmiare risorse per non rilevare più contatti se non sono necessari. –