0
我有一個奇怪的行爲SKPhysicsbody
。即使不直接接觸物理體
首先讓我告訴你我的主要節點:
self.physicsWorld.contactDelegate = self
self.physicsWorld.gravity = CGVectorMake(0, 0)
self.physicsBody = SKPhysicsBody(rectangleOfSize: self.frame.size)
self.physicsBody!.collisionBitMask = player
self.physicsBody!.categoryBitMask = wall
self.physicsBody!.contactTestBitMask = player
self.physicsBody?.dynamic = true
self.name = "background"
現在最重要的是,有沒有任何physicsbody另一個SKSpriteNode,姑且稱之爲path
。
一段時間後,我產生另一個節點,在該path
頂部的playernode:
playerNode = SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(tileSize/1, tileSize/1))
playerNode.position = CGPointMake(self.frame.width/2, self.frame.height/2)
playerNode.zPosition = 3
playerNode.name = "player"
playerNode.physicsBody = SKPhysicsBody(rectangleOfSize: playerNode.size)
playerNode.physicsBody!.categoryBitMask = player
playerNode.physicsBody!.collisionBitMask = wall
playerNode.physicsBody!.contactTestBitMask = wall
playerNode.physicsBody?.dynamic = false
在我看來
所以,didBeginContact
應該只觸發如果playerNode
是path
節點之外,如果移動它真的觸及了背景。
但目前,didBeginContact
觸發我立即在我的path
之上產生我的playerNode後。
我錯過了什麼嗎?
的問題是,我的背景始終是我的節點後面。我應該能夠檢查我的節點是否觸及了我的背景,或者我的播放器和背景節點之間是否有節點。 – Christian
您可以通過檢查以查看您的節點是否與任何其他節點相交。這就是我上面所描述的。 – hamobi
@Christian如果內存服務器正確地處理物理實體忽略層,子和zPositions。這意味着如果你的路徑在一個物理體內,並且你將一個新的物理體添加到路徑中,如果路徑在第一個物理體內,它將觸發didBeginContact。這聽起來像你試圖檢測玩家何時離開路徑。 Hamobi是正確的,你不需要物理學來檢測它,你可以檢查它是否仍然與節點相交。 –