ios快速碰撞检测

时间:2014-10-12 18:43:11

标签: ios swift collision-detection collision

我正在尝试构建我的第一个iOS swift游戏,我在检测对象之间的碰撞方面遇到了一些麻烦。 我有一些物体掉下来,另一个物体在屏幕的底部。 我想知道落下的物体何时接触另一个物体。 所以,这就是我所拥有的:

在我的场景类中(在我的init方法中):

player = SKSpriteNode(imageNamed: "playerImg")
    player.position = CGPointMake(gameBoard.size.width/2, -(gameBoard.size.height + 55))
    player.size = CGSize(width: 40,height: 40)
    player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size)
    player.physicsBody?.dynamic = false
    player.physicsBody?.categoryBitMask = BodyType.bro.rawValue
    player.physicsBody?.contactTestBitMask = BodyType.bro.rawValue
    player.physicsBody?.affectedByGravity = true

在我自己的定制方法中(仍然在同一个场景类中):

let sprite = SKSpriteNode(texture: texture)

    sprite.position = pointForColumn(block.column, row: block.row - 2)
    block.sprite = sprite

    sprite.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size)
    sprite.physicsBody?.dynamic = false
    sprite.physicsBody?.categoryBitMask = BodyType.bro.rawValue
    sprite.physicsBody?.contactTestBitMask = BodyType.bro.rawValue
    sprite.physicsBody?.affectedByGravity = true

这是我的BodyType枚举:

enum BodyType:UInt32 {

    case bro = 1
    case ground = 2
    case anotherBody1 = 4
    case anotherBody2 = 8
    case anotherBody3 = 16

}

最后,在我的didMoveToView方法中,我有:

physicsWorld.contactDelegate = self
    view.showsPhysics = true

所以,我看到我的对象周围的绿色边框,但是当他们触摸时我在didBeginContact方法中没有任何内容(这里附有截图)。 任何人,在发现碰撞时有一些想法是什么,以便触发?

enter image description here

2 个答案:

答案 0 :(得分:1)

我明白了。 我不得不把

        sprite.physicsBody?.dynamic = true
        sprite.physicsBody?.affectedByGravity = false

之后,它就像一个魅力。

答案 1 :(得分:0)

您正在设置contactTestBitMask,而不是collisionBitMask。前者只是让SpriteKit通知你身体之间的联系,但在接触时物理模拟中没有任何改变。您需要后者才能使碰撞变成碰撞(并且要解决碰撞,使物体停止或相互反弹)。