如何防止部分SKSpriteNode通过Edge

时间:2016-01-19 05:53:26

标签: swift sprite-kit swift2

我通过以下方式创建了左边缘:

let leftBorderEdgeRect = CGRectMake(self.frame.origin.x, self.frame.origin.y, 0.5 , CGRectGetHeight(frame))
let leftBorderEdge = SKNode()
leftBorderEdge.physicsBody = SKPhysicsBody(edgeLoopFromRect: leftBorderEdgeRect)

每当一个SKSpriteNode与边缘接触时,其大约10%的尺寸(宽度)都会通过边缘。我通过施加力量来移动精灵。现在,我按照以下方式在didBeginContact中建立联系时暂停场景:

if firstBody.categoryBitMask == spriteCategory && secondBody.categoryBitMask == leftBorderCategory  {
    print("contact with leftBorder")
    print("firstBody.node xPos: \(firstBody.node?.position.x) and yPos: \(firstBody.node?.position.y)")
    self.view?.paused = true
}

我不确定是什么导致它通过边缘边界。我也尝试为整个场景设置世界优势,但仍然得到相同的结果。我正在使用我的精灵的默认锚点。

1 个答案:

答案 0 :(得分:0)

您是否尝试过将usesPreciseCollisionDetection设置为true?

如果您对象很小,或移动速度很快或帧速率较低,则对象在帧之间移动的距离可能大于几个像素。这意味着在评估下一次碰撞检测时,单位的移动可能已经超出了边缘。

如果你有少量的移动物体,并且只想根据场景矩形的边界约束移动,你可以覆盖SKScene的update()方法并检查那里的边界。检查矩形内外的点是否足够快,如果您只检查几个精灵,它将不会影响游戏性能。