我测试了一个简单的场景。
无法调用Func didBeginContact
。
我尝试使用collisionBitMask
和s1.physicsBody = SKPhysicsBody(circleOfRadius: 100)
。问题持续存在。
我该怎么做才能修复它?
import SpriteKit
class Test2Scene: SKScene, SKPhysicsContactDelegate {
override func didMoveToView(view: SKView) {
physicsWorld.contactDelegate = self
physicsWorld.speed = 0
let s1 = SKSpriteNode(imageNamed: kImagePlayer)
s1.position = CGPointMake(100, 100)
s1.physicsBody = SKPhysicsBody(rectangleOfSize: s1.size)
s1.physicsBody?.categoryBitMask = 1
s1.physicsBody?.contactTestBitMask = 2
//s1.physicsBody?.collisionBitMask = 2
self.addChild(s1)
let s2 = SKSpriteNode(imageNamed: kImagePlayer)
s2.position = CGPointMake(100, 500);
s2.runAction(SKAction.moveToY(0, duration: 1))
s2.physicsBody = SKPhysicsBody(rectangleOfSize: s2.size)
s2.physicsBody?.categoryBitMask = 2
//s2.physicsBody?.collisionBitMask = 1
self.addChild(s2);
print("view did load")
}
func didBeginContact(contact: SKPhysicsContact) {
print("aaa")
}
func didEndContact(contact: SKPhysicsContact) {
print("bbb")
}
}
答案 0 :(得分:1)
你的代码几乎都错了,但你的罪犯是:
physicsWorld.speed = 0
来自文档:
默认值为1.0,表示模拟正常运行 速度。默认值以外的值会更改此时的速率 通过物理模拟。例如,速度值为2.0 表示物理模拟中的时间通过的速度是原来的两倍 场景的模拟时间。值0.0会暂停物理 模拟。
因此将其设置为0.0会暂停模拟。第二个问题是您的节点受重力影响,但您使用SKAction
移动它们。这样你就可以将节点从物理模拟中拉出来,你可能会遇到奇怪的行为。
另外,我建议您阅读this great StackOverflow post有关位掩码以及它们如何工作/应该使用的方法。
答案 1 :(得分:0)
找出原因。需要使用
s1.physicsBody!.dynamic = true
s2.physicsBody!.dynamic = true