Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何防止部分SKSpriteNode通过边缘_Swift_Sprite Kit_Swift2 - Fatal编程技术网

Swift 如何防止部分SKSpriteNode通过边缘

Swift 如何防止部分SKSpriteNode通过边缘,swift,sprite-kit,swift2,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) if firstBody.ca

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

let leftBorderEdgeRect = CGRectMake(self.frame.origin.x, self.frame.origin.y, 0.5 , CGRectGetHeight(frame))
let leftBorderEdge = SKNode()
leftBorderEdge.physicsBody = SKPhysicsBody(edgeLoopFromRect: leftBorderEdgeRect)
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
}
任何时候,一个SKSpriteNode与边缘接触时,大约有10%的大小(宽度)通过边缘。我通过施力移动精灵。现在,当通过以下方式在didBeginContact中建立联系时,我暂停场景:

let leftBorderEdgeRect = CGRectMake(self.frame.origin.x, self.frame.origin.y, 0.5 , CGRectGetHeight(frame))
let leftBorderEdge = SKNode()
leftBorderEdge.physicsBody = SKPhysicsBody(edgeLoopFromRect: leftBorderEdgeRect)
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
}

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

您是否尝试将usesPreciseCollisionDetection设置为true

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


如果有少量移动对象,并且仅希望根据场景矩形的边界约束移动,则可以覆盖场景的update()方法并在那里检查边界。检查矩形内或矩形外的点足够快,如果只检查几个精灵,则不会影响游戏性能。

能否显示整个didBeginContacts方法