无法调用SpriteKit的didBeginContact

时间:2016-04-21 06:36:51

标签: swift sprite-kit skscene skphysicscontact

我测试了一个简单的场景。

无法调用Func didBeginContact

我尝试使用collisionBitMasks1.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")
    }
}

2 个答案:

答案 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