【问题标题】:Can't get "didBeginContact" to work无法让“didBeginContact”工作
【发布时间】:2014-07-30 09:06:59
【问题描述】:

我刚开始玩 swift 并希望在我的任何节点发生碰撞时执行某些操作。显然我没有得到那个工作,但我不知道为什么。阅读文档几次,但它主要是为 Objective-C 编写的,老实说,我认为我没有理解它。

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {

  var eyeset = 0
  var eyes: [SKSpriteNode] = []

  override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
      /* Called when a touch begins */

      for touch: AnyObject in touches {

          let location = touch.locationInNode(self)

          if (eyeset < 9) {

              eyes.insert(SKSpriteNode(imageNamed: "eye"), atIndex: eyeset)
              eyes[eyeset].xScale = 0.25
              eyes[eyeset].yScale = 0.25
              eyes[eyeset].position = location
              eyes[eyeset].physicsBody = SKPhysicsBody(circleOfRadius: eyes[eyeset].size.height/2)
              eyes[eyeset].physicsBody.collisionBitMask = 1
              eyes[eyeset].physicsBody.dynamic = true
              eyes[eyeset].physicsBody.affectedByGravity = true

              self.addChild(eyes[eyeset])
              eyeset++
          }
          else if (eyeset < 10) {

              eyes.insert(SKSpriteNode(imageNamed: "eye"), atIndex: eyeset)
              eyes[eyeset].xScale = 0.5
              eyes[eyeset].yScale = 0.5
              eyes[eyeset].position = location
              eyes[eyeset].physicsBody = SKPhysicsBody(circleOfRadius: eyes[eyeset].size.height/2)
              eyes[eyeset].physicsBody.collisionBitMask = 1
              eyes[eyeset].physicsBody.dynamic = true
              eyes[eyeset].physicsBody.angularDamping = 1
              eyes[eyeset].physicsBody.affectedByGravity = false

              self.addChild(eyes[eyeset])
              eyeset++
          }
          else {
              eyes[eyeset-1].runAction(SKAction.moveTo(location, duration: 0.25))
          }
      }
  }

  func didBeginContact(contact: SKPhysicsContact!) {
      println("Muttermäßig")
  }
}

【问题讨论】:

    标签: swift sprite-kit xcode6


    【解决方案1】:

    要使接触检测起作用,您必须设置SKPhysicsBodycontactTestBitMask 属性。

    eyes[eyeset].physicsBody.contactTestBitMask = 1
    

    CollisionBitMask 指定物理环境中哪些物体可以相互碰撞,而contactTestBitMask 定义当节点与它们相交时将调用接触委托方法的物理物体类别。

    阅读文档here

    【讨论】:

    • 很抱歉再次打扰您,但是 didBeginContact 上的函数仍然没有触发。我还缺少什么?
    • 我明白了。我确实初始化了任何物理世界......我为那个失礼道歉。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2014-12-26
    • 2017-12-22
    • 2012-02-28
    • 2015-12-01
    • 2012-01-29
    相关资源
    最近更新 更多