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"

现在最重要的是,还有另一个没有任何物理体的 SKSpriteNode,我们称之为path

一段时间后,我生成了另一个节点,即上面的 playernode 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时才应该触发。playerNodepath

但目前,在didBeginContact我将 playerNode 生成在path.

我错过了什么吗?

4

1 回答 1

0

理解有点困难..但听起来你想检测你的播放器节点何时退出路径节点的位置。

它触发了物理接触,因为无论如何你的玩家节点总是会与场景的物理体相交。

实际上,您不需要物理学。在您的更新方法中,您只需检查您的播放器是否与您的路径节点(或您关心的任何节点)相交。如果它不与那些相交,那么它就直接位于你的世界、场景等中。

更新内部:

if !playerNode.intersectsNode(path) {
    // your code here
于 2015-06-19T19:09:07.437 回答