3 개의 몸체가 동시에 충돌하여 내 앱이 충돌 할 때 드물게 발생하는 문제가 있습니다. 세 개의 시체가 한 번에 충돌하지 않는 한 body1과 body2 또는 body1과 body3 사이의 충돌 감지가 잘 작동합니다 (body2와 body3 충돌은 중요하지 않으며 서로 통과 할 수 있습니다). 그렇게되면 나는 이러한 오류를 얻을 :xcode에서 3 개의 신체 충돌 감지 문제가 발생했습니다.
fatal error: unexpectedly found nil while unwrapping an optional value
및
thread1: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP,subcode=0x0
어떤 도움이 많이 감사합니다. 관련 코드는 다음과 같습니다.
func didBeginContact(contact: SKPhysicsContact) {
var firstBody: SKPhysicsBody!
var secondBody: SKPhysicsBody!
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
} else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}
if ((firstBody.categoryBitMask & PhysicsCategory.Enemy != 0) &&
(secondBody.categoryBitMask & PhysicsCategory.Star != 0)) {
starDidCollideWithEnemy(firstBody.node as! SKSpriteNode, enemy: secondBody.node as! SKSpriteNode)
}
if ((firstBody.categoryBitMask & PhysicsCategory.Enemy != 0) &&
(secondBody.categoryBitMask & PhysicsCategory.Flyer != 0)) {
flyerDidCollideWithEnemy(firstBody.node as! SKSpriteNode, enemy: secondBody.node as! SKSpriteNode)
}
제 3 자 본문을 추가하는 방법이 있습니까? 또는 다른 신체의 경우에 접촉하는 신체의 2 가지 경우를 탐지하는 어떤 방법?
더 많은 것을 가지고 놀아 나는 충돌하는 객체 중 하나를 제거하지 않으면 문제가 해결된다는 것을 알게되었습니다. 이것은 게임에 이상적이 아니기 때문에이 충돌을 없애고 여전히 충돌하는 모든 객체를 제거 할 수 있기를 바랍니다. 어쩌면 부모에게서 완전히 제거 된 것이 있을까요?
답변을 주셔서 감사합니다. 추가로 시도했지만 다른 신체가 한 번에 충돌 할 때 충돌이 발생합니다. 당신은 starDidCollideWithEnemy가 관련된 2 개의 충돌 몸체를 제거했다는 점에서 정확했습니다. 그래서 flyerDidCollideWithEnemy도 마찬가지입니다. 어쩌면 3 가지 신체 충돌을 모두 테스트 할 수있는 방법이있을 수 있습니다. 그렇다면 충돌에 관련된 모든 신체를 제거 할 수 있습니까? – spapp