ios - 检测 Swift 2 中一个节点的子节点和另一个节点的碰撞

标签 ios swift sprite-kit

所以我创建了一个名为planet的父节点,它有两个子节点,其中一个是“landingPad”。我正在尝试检测该子节点与另一个名为“lander”的节点之间的碰撞。我尝试了很多选择,但似乎没有任何效果。提前致谢。

  func createPlanet() {
    var planet = SKSpriteNode()
    planet.zPosition = 1
    planet.name = "mars"

    redPlanet = SKSpriteNode(imageNamed: "redPlanet")
    redPlanet.name = "red"
    redPlanet.zPosition = 2
    planet.addChild(redPlanet)

    landingPad = SKSpriteNode(imageNamed: "landingPad")
    landingPad.name = "pad"
    landingPad.zPosition = 3
    landingPad.position = CGPoint(x: 0, y: redPlanet.size.height / 2 - 60)
    landingPad.physicsBody = SKPhysicsBody(texture: landingPad.texture!, size: size)
    landingPad.physicsBody!.dynamic = false
    landingPad.physicsBody!.categoryBitMask = landingPadMask
    landingPad.physicsBody!.collisionBitMask = landerMask
    landingPad.physicsBody!.contactTestBitMask = 0
    planet.addChild(landingPad)

    planet.position = CGPoint(x: frame.size.width / 2, y: -redPlanet.size.height / 6)
    planet.physicsBody = SKPhysicsBody(circleOfRadius: redPlanet.size.height / 2)
    planet.physicsBody!.dynamic = false
    planet.physicsBody!.categoryBitMask = planetMask
    planet.physicsBody!.contactTestBitMask = 0

    let spinner = SKAction.rotateByAngle(CGFloat(M_PI), duration: 3)
    planet.runAction(SKAction.repeatActionForever(spinner))

    addChild(planet)
  }

还有着陆器代码...

  func createLander() {
    var randomX = RandomInt(min: 10, max: 400)

    lander = SKSpriteNode(imageNamed: "lander")
    lander.position = CGPoint(x: CGFloat(randomX), y: frame.size.height + 20)
    lander.name = "lander"
    lander.zPosition = 10


    lander.physicsBody = SKPhysicsBody(texture: lander.texture!, size: lander.size)
    lander.physicsBody!.dynamic = true
    lander.physicsBody!.affectedByGravity = true
    lander.physicsBody!.friction = 0.2
    lander.physicsBody!.restitution = 0.75
    lander.physicsBody!.linearDamping = 0.208
    lander.physicsBody!.angularDamping = 0.1
    lander.physicsBody!.categoryBitMask = landerMask
    lander.physicsBody!.collisionBitMask = landingPadMask | cometMask

    addChild(lander)
  }

最佳答案

你失踪了:

lander.physicsBody!.contactTestBitMask = landingPadMask | cometMask

landingPad.physicsBody!.contactTestBitMask = landerMask

对于代表:

self.physicsWorld.contactDelegate = self; 

然后你会遇到碰撞:

didBeginContactdidEndContact

关于ios - 检测 Swift 2 中一个节点的子节点和另一个节点的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35404016/

相关文章:

swift - 将 Swift 字符串转换为 wchar_t

ios - SKSpriteNode 之间出现奇怪的间隙 - swift

ios - SpriteKit 中的默认混合是如何工作的?

ios - 在 afnetworking 3.0 中发布请求?

iphone - 用varargs编写replaceTokensWithStrings:方法

iphone - 从 NSMutableArray 中拉出 NSArray

ios - 自动调整表格 View 单元格中 UILabel 中的行数

ios - 试图从项目中删除音频文件

ios - 禁用编辑但允许继续快速输入

swift - 将 Sprite Kit View 添加到 UIView Xcode 8.2.1