我没有制作自己的协议的经验,我正在尝试创建一个,以便我可以将GameController
dpad值发送到SKScene
。一切都已连接并正确构建,但我的SKScene
没有收到任何信息。
这是我的主视图控制器:
import GameController
import ...
protocol GetsDpadFromController {
func dpadValueUpdate(dpadValue: CGPoint)
}
class GameViewController: UIViewController {
var joystickController: GCController!
var dpadData: GetsDpadFromController? = nil
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "addController:", name: GCControllerDidConnectNotification, object: nil)
}
}
func addController(sender: NSNotificationCenter) {
self.joystickController = GCController.controllers().first
self.joystickController.microGamepad?.reportsAbsoluteDpadValues = true
self.joystickController.microGamepad?.valueChangedHandler = { (gamepad, element) -> Void in
if element == self.joystickController.microGamepad?.dpad {
let x: CGFloat = CGFloat((self.joystickController.microGamepad?.dpad.xAxis.value)!)
let y: CGFloat = CGFloat((self.joystickController.microGamepad?.dpad.yAxis.value)!)
let touchPosition: CGPoint = CGPointMake(x, y)
if let delegate = self.dpadData {
delegate.dpadValueUpdate(touchPosition)
}
}
}
}
这是我的SKScene:
class Page04: SKScene, GetsDpadFromController {
override init(size: CGSize){
super.init(size: size)
}
func dpadValueUpdate(dpadValue: CGPoint) {
print(dpadValue)
}
}
SKScene中的dpadValueUpdate
无法打印,因此我无法获取控制器数据。我之前从未制定过自己的协议,所以我不太确定我做错了什么。
有谁知道为什么SKScene
没有收到数据?
答案 0 :(得分:2)
您已正确声明GetsDpadFromController
协议并使Page04
场景符合该协议。
查看您的代码,dpadData
中的GameViewController
属性始终为nil
。
所以这个IF的主体永远不会被执行。
if let delegate = self.dpadData {
delegate.dpadValueUpdate(touchPosition)
}
用这个替换IF
let skView = self.view as! SKView
if let delegate = skView.scene as? GetsDpadFromController {
delegate.dpadValueUpdate(touchPosition)
}
现在您正在检查当前场景是否符合GetsDpadFromController
(对于Page04
也是如此),如果是,您正在调用场景中的dpadValueUpdate
。
让我知道它是否有用。