5

我正在尝试回应 SKScene 子类中的新闻。我可以很好地覆盖 ViewController 中的响应程序 pressesEnded,但是当我将 pressesEnded 覆盖移动到我的 SKScene 子类中时,我不再收到任何呼叫。

下面是我的 pressesEnabled 覆盖,它在 ViewController 内部按预期工作

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
    print("press")
}

有人知道如何在 SKScene 内接收按钮按下吗?

4

2 回答 2

8

您需要将您的新闻事件从您的 ViewController 转发到 SKScene,就像这样......

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {   
  gameScene.pressesBegan(presses, withEvent: event)
}

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
  gameScene.pressesEnded(presses, withEvent: event)
}

然后在 gameScene (SKScene) 中执行以下操作:

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
  for press in presses {
    switch press.type {
    case .UpArrow:
      print("Up Arrow")
    case .DownArrow:
      print("Down arrow")
    case .LeftArrow:
      print("Left arrow")
    case .RightArrow:
      print("Right arrow")
    case .Select:
      print("Select")
    case .Menu:
      print("Menu")
    case .PlayPause:
      print("Play/Pause")
    }
  }
}

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
  print("Presses Ended.")
}

当用户点击触摸板的边缘时会发送“箭头”按下,但在模拟器中无法识别。点击触摸板的中心时发送“选择”。

我希望这有帮助!

于 2015-09-21T23:28:29.910 回答
1

用于pressesBegan映射物理按钮(菜单、播放暂停)和pressesBegan/或pressesEnded用于 Apple TV Remote 的触控板(左、右等)。如果您按下触控板的“按钮”并移动到另一个位置并释放,pressesEnded则不会调用该方法,您无法使用物理按钮执行此操作。

压力机开始:

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
        print("Press began")
        for item in presses {
            if item.type == .PlayPause {
                    print("PlayPause")
            }
        }
}

印刷结束:

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
        print("Press Ended")
        for item in presses {
            if item.type == .RightArrow {
                print("Right Arrow")
            }
        }
    }
于 2015-11-26T15:32:13.853 回答