swift - iOS Swift didBeginContact 未被调用

标签 swift sprite-kit collision-detection skphysicsbody skphysicsworld

这两天我一直在努力让两个 SKSpriteNode 注册碰撞并唤起 didBegin#contact

我已经为这两个对象设置了位掩码“categoryBitMask”、“contactTestBitMask”和“collisionTestBitMask”。

我还将两者的“dynamic”属性设置为“true

initPhysics() 似乎可以设置 physicsWorld。

我所期望的是 didBegin#Contact 被调用了,但它没有被调用

//Set up Physicsbody bit masks
let playerCarBitMask: UInt32 = 0x1 << 1
let slowCarBitMask: UInt32 = 0x1 << 2



//initPhysics
func initPhysics() {
    println("(((((((((((((( Initiating Physicsbody ))))))))))))))")
    self.physicsWorld.contactDelegate = self
    self.physicsWorld.gravity = CGVector.zeroVector

    println("self.physicsWorld.contactDelegate = \(self.physicsWorld.contactDelegate)")

}

//setupPlayer
func setupPlayer() {

    car = SKSpriteNode(imageNamed: "redCarUp")
    car.setScale(2.0)
    car.position = CGPoint(x: 800, y: 400)
    car.zPosition = 100
    car.name = "car"

    gameNode.addChild(car)

    let carBody = SKPhysicsBody(
        rectangleOfSize: car.frame.size, center: car.position)

    carBody.dynamic = true
    carBody.categoryBitMask = playerCarBitMask
    carBody.contactTestBitMask = slowCarBitMask
    carBody.mass = 5
    carBody.collisionBitMask = slowCarBitMask
    car.physicsBody = carBody

    println("carBody = \(carBody)")
    println("carBody.dynamic = \(carBody.dynamic)")
    println("carBody.mass = \(carBody.mass)")
    println("carBody.categoryBitMask = \(carBody.categoryBitMask)")
    println("carBody.contactTestBitMask = \(carBody.contactTestBitMask)")
    println("carBody.collisionBitMask = \(carBody.contactTestBitMask)")



    slowCar = SKSpriteNode(imageNamed: "blueCarUp")
    slowCar.setScale(2.0)
    let slowCarScenePos = CGPoint(
        x: 680,
        y: 2048)


    slowCar.position = gameNode.convertPoint(slowCarScenePos, fromNode: self)
    println("slowCar.position = \(slowCar.position) ****")
    slowCar.zPosition = 80
    slowCar.name = "slowCar"



    let slowCarBody = SKPhysicsBody(
        rectangleOfSize: slowCar.frame.size, center: slowCar.position)


    println("slowCar = \(slowCar) ****")

    slowCarBody.dynamic = true
    slowCarBody.categoryBitMask = slowCarBitMask
    slowCarBody.contactTestBitMask = playerCarBitMask
    slowCarBody.mass = 5
    slowCarBody.collisionBitMask = playerCarBitMask
    slowCar.physicsBody = slowCarBody
    gameNode.addChild(slowCar)



}

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

最佳答案

'didBeginContact' 已在 swift 3 中更改为 'didBegin'

func didBegin(_ contact: SKPhysicsContact) { //东西 }

我有一个来自 swift 2 的代码,“didBeginContact”就在那里,但没有被调用。相当白后我想通了功能被改变了。所以,我认为我的回答可以帮助别人。

关于swift - iOS Swift didBeginContact 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26438108/

相关文章:

swift - 在不同形状的 Metal 纹理之间复制数据

ios - 将自定义 swift 对象作为输入传递给 javascript 方法

ios - iPhone X - 面容 ID - 不需要的 "Enter your Password"文本

ios - 在 Sprite Kit( Objective-C )中切换场景会引发错误

ios - 如何获取 CGPDFDictionaryRef 键

ios - SpriteKit 中的持续运动

swift - 设置位置后更改节点的位置。(SpriteKit)

python - 碰撞不适用于 pygame Sprites

javascript - 如何做好防撞工作? (重置玩家对象的位置)

javascript - 碰撞检测函数始终返回 true