물리 본문을 SKSpriteNode의 하위 클래스로로드하는 방법이 있습니까? 장면 외부에 SKSpriteNode의 하위 클래스를 만들었습니다.SKSpriteNode 서브 클래스의 물리 본문로드
class specializedNode: SKSpriteNode {
var variable = 0
}
장면 내에서 objectA 및 물리 카테고리 구조를 만드는 함수를 만들었습니다.
struct PhysicsCategory {
static let None : UInt32 = 0
static let All : UInt32 = UInt32.max
static let A : UInt32 = 0b1
static let B : UInt32 = 0b10
}
func spawnObjectA() {
objectA = specializedNode()
objectA.physicsBody = SKPhysicsBody(rectangleOfSize: objectA.size)
objectA.physicsBody?.dynamic = true
objectA.physicsBody?.categoryBitMask = PhysicsCategory.A
objectA.physicsBody?.contactTestBitMask = PhysicsCategory.B
objectA.physicsBody?.collisionBitMask = PhysicsCategory.None
objectA.physicsBody?.usesPreciseCollisionDetection = true
addChild(objectA)
}
그런 다음 objectA가 objectB와 충돌 할 때 didBeginContact를 호출했습니다.
func objectADidCollide(objectA:specializedNode, objectB:SKSpriteNode) {
objectB.removeFromParent()
++objectA.variable
}
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.A != 0) && (secondBody.categoryBitMask & PhysicsCategory.B != 0)) {
objectADidCollide(firstBody.node as specializedNode, objectB: secondBody.node as SKSpriteNode)
}
}
그러나 코드를 실행하고 두 개체가 충돌하면 코드가 중단 점에 도달하고 디버그 탐색기가 팝업됩니다.
라인 10 (0x58e0fc : 트랩)으로 변 녹색 및 표시 :
"스레드 : 1 EXC_BREAKPOINT (코드 = EXC_ARM_BREAKPOINT, 서브 코드 = 0xdefe)"
libswiftCore.dylib`swift_dynamicCastClassUnconditional:
0x58e0ec: cbz r0, 0x58e0fc ; swift_dynamicCastClassUnconditional + 16
0x58e0ee: ldr r2, [r0]
0x58e0f0: cmp r2, r1
0x58e0f2: it eq
0x58e0f4: bxeq lr
0x58e0f6: ldr r2, [r2, #0x4]
0x58e0f8: cmp r2, #0x0
0x58e0fa: bne 0x58e0f0 ; swift_dynamicCastClassUnconditional + 4
0x58e0fc: trap
0x58e0fe: nop
나는대로 objectA를로드하지 않으 SKSpriteNode, 하위 클래스에서 만든 objectA의 특성을 변경하려고합니다. 어떤 제안?
디버그 탐색기? 앱이 중단 점에 도달하거나 충돌하는 것을 의미합니까? 그렇다면 충돌 메시지를 게시하고 충돌이 발생한 줄을 게시하십시오. 있는 그대로, spawnObjectA 메서드는 결코 노드를 자식으로 추가하지 않으므로 게임에 나타나지 않습니다. – LearnCocos2D
코드를 전송할 때 실수로 생성 라인을 삭제하고 관련없는 코드를 삭제해야합니다. 충돌 메시지가 있습니다. – ETRunner
프로젝트에 중단 점이 있습니까? xcode의 중단 점 탐색기 창 확인 – LearnCocos2D