didBeginContact未被调用

时间:2014-11-15 01:00:37

标签: ios swift

我正在尝试创建一个程序,打印出我的宇宙飞船经过一个圆圈的东西,但是当我把宇宙飞船放在圆圈上时,它不打印任何东西。我是否构建了错误的didBeginContact方法?我是否设置了BitMasks错误?

import SpriteKit

class GameScene: SKScene {
    var spaceship: SKNode!
    var circ: SKNode!
    override func didMoveToView(view: SKView) {
        self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
        spaceship = SKSpriteNode(imageNamed: "Spaceship")
        spaceship.setScale(0.4)
        spaceship.position.x = self.frame.width/2
        spaceship.position.y = spaceship.frame.height/2
        spaceship.physicsBody = SKPhysicsBody(circleOfRadius: spaceship.frame.height/2)
        spaceship.physicsBody?.categoryBitMask = 1
        spaceship.physicsBody?.contactTestBitMask = 2
        spaceship.physicsBody?.collisionBitMask = 0
        spaceship.physicsBody?.dynamic = true

        circ = SKShapeNode(circleOfRadius: 50)
        circ.position.y = self.frame.height/2
        circ.position.x = self.frame.width/2
        circ.physicsBody = SKPhysicsBody(circleOfRadius: 50)
        circ.physicsBody?.categoryBitMask = 2
        circ.physicsBody?.contactTestBitMask = 1
        circ.physicsBody?.collisionBitMask = 0
        circ.physicsBody?.dynamic = true
        self.addChild(circ)
        self.addChild(spaceship)
    }

    func didBeginContact(contact: SKPhysicsContact){
        println("colliding!")
    }

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        for touch: AnyObject in touches {
            let location = touch.locationInNode(self)
            spaceship.position = location
        }
    }

    override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
        for touch: AnyObject in touches {
            let location = touch.locationInNode(self)
            spaceship.position = location
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您需要将自己声明为物理世界的联系代表:

// add conformance to SKPhysicsContactDelegate:
class GameScene: SKScene, SKPhysicsContactDelegate {
    // ...
    override func didMoveToView(view: SKView) {
        self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)

        // set as delegate:
        self.physicsWorld.contactDelegate = self

        // ..
    }

    // should be called now
    func didBeginContact(contact: SKPhysicsContact){
        println("colliding!")
    }
}
相关问题