我有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"
现在最重要的是,还有另一个没有任何物理实体的SKSpriteNode,我们称之为path
。
过了一段时间,我产生了另一个节点,播放器节点位于path
之上:
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之后立即触发。
我错过了什么吗?
答案 0 :(得分:0)
理解方面有点麻烦..但听起来你想要检测播放器节点何时退出路径节点的位置。
它触发了物理接触,因为无论如何,你的玩家节点总是会与场景的物理体相交。
实际上你不需要任何物理学。在您的更新方法中,您可以检查您的播放器是否与您的路径节点(或您关心的任何节点)相交。如果它不与那些相交,那么它就直接坐在你的世界,场景等中。
更新内部:
if !playerNode.intersectsNode(path) {
// your code here