【问题标题】:ios swift collision detectionios 快速碰撞检测
【发布时间】:2017-10-31 15:57:39
【问题描述】:

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

在我的场景类中(在我的 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 方法中没有任何内容(此处附有屏幕截图)。 任何人,都知道为了在检测到碰撞时触发而缺少什么?

【问题讨论】:

    标签: ios swift collision-detection collision


    【解决方案1】:

    我明白了。 我不得不把

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

    然后它就像一个魅力。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 其实,我现在只想收到联系人通知。
      猜你喜欢
      • 2010-10-16
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      相关资源
      最近更新 更多