Swift SpriteKit物理学假阳性?
didBeginContact提供的接触点并不总是位于定义碰撞中涉及的物理实体的路径中。在物体从未接触的情况下,这种行为是最有问题的(如果圆节点再向右1px,接触仍然会发生,尽管在数学上是不可能的。) 在下图和程序中,矩形的宽度为100px,但接触点(如输出所示)为101.4550Swift 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
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。我试过了。没有效果。您在两个节点上都设置了属性吗?是的。我将修改上面的代码以包含它。向苹果提交了一份错误报告。