【问题标题】:How to prevent part of SKSpriteNode from passing Edge如何防止部分SKSpriteNode通过Edge
【发布时间】:2016-01-19 05:53:25
【问题描述】:

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

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
}

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

【问题讨论】:

  • 你能展示整个didBeginContacts方法吗

标签: swift sprite-kit swift2


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2016-04-03
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多