Swift SpriteKit物理学假阳性?

Swift SpriteKit物理学假阳性?,swift,sprite-kit,game-physics,skphysicsbody,Swift,Sprite Kit,Game Physics,Skphysicsbody,didBeginContact提供的接触点并不总是位于定义碰撞中涉及的物理实体的路径中。在物体从未接触的情况下,这种行为是最有问题的(如果圆节点再向右1px,接触仍然会发生,尽管在数学上是不可能的。) 在下图和程序中,矩形的宽度为100px,但接触点(如输出所示)为101.4550 import SpriteKit class GameScene: SKScene, SKPhysicsContactDelegate { var node1:SKShapeNode var node2:SKS

didBeginContact提供的接触点并不总是位于定义碰撞中涉及的物理实体的路径中。在物体从未接触的情况下,这种行为是最有问题的(如果圆节点再向右1px,接触仍然会发生,尽管在数学上是不可能的。)

在下图和程序中,矩形的宽度为100px,但接触点(如输出所示)为101.4550

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {


var node1:SKShapeNode
var node2:SKShapeNode
var node2PhysicsPath:CGPath
var contactPoint:SKShapeNode


required init?(coder aDecoder: NSCoder) {

    contactPoint = SKShapeNode(circleOfRadius: 10)
    contactPoint.strokeColor = SKColor(calibratedRed: 1, green: 0, blue: 0, alpha: 1)

    node1 = SKShapeNode()
    node1.position.x = 150
    node1.position.y = 200
    node1.physicsBody = SKPhysicsBody(circleOfRadius: 50)
    node1.physicsBody?.contactTestBitMask = 0xffffffff
    node1.physicsBody?.categoryBitMask = 0xffffffff
    node1.physicsBody?.usesPreciseCollisionDetection = true


    node2PhysicsPath = CGPathCreateWithRect(CGRect(x: 0, y: 0, width: 100, height: 100), nil)

    node2 = SKShapeNode()
    node2.physicsBody = SKPhysicsBody(polygonFromPath: node2PhysicsPath)
    node2.physicsBody?.dynamic = false
    node2.physicsBody?.contactTestBitMask = 0xffffffff
    node2.physicsBody?.categoryBitMask = 0xffffffff
    node2.physicsBody?.usesPreciseCollisionDetection = true

    super.init(coder: aDecoder)

    physicsWorld.contactDelegate = self
}

func didBeginContact(contact:SKPhysicsContact){
    println(contact.contactPoint);
    contactPoint.position = contact.contactPoint
    self.physicsWorld.speed = 0
    println(CGPathContainsPoint(node2PhysicsPath, nil, contact.contactPoint, true))
}

override func didMoveToView(view: SKView) {
    self.addChild(node1)
    self.addChild(node2)
    self.addChild(contactPoint)
    self.physicsWorld.gravity = CGVector(dx: 0, dy: -1.0)
}

}


尝试将节点的SKPhysicsBody上的
usesPreciseCollisionDetection
属性设置为YES。我试过了。没有效果。您在两个节点上都设置了属性吗?是的。我将修改上面的代码以包含它。向苹果提交了一份错误报告。