-1

我正在快速学习,我正在尝试制作一个简单的应用程序,我可以在其中使用键盘移动对象(默认船)。我正在设计一个事件来代表左按键。由于我不需要鼠标位于特定位置,因此 NSLocation 对我来说没有真正用处。官方文档告诉我返回未定义的变量 locationInWindow,这是我的 NSPoint for NSLocation。

我不确定他们的意思是什么。我尝试使用 _undefined 关键字,但后来出现了:

无法将类型 '(@autoclosure () -> String, StaticString, UInt) -> _' 的值转换为指定类型 'NSPoint'(又名 'CGPoint')

这是我的代码

        var locationInWindow : NSPoint{
        return _undefined
    }

    let movingLeftEvent = NSEvent.keyEvent(with:NSEvent.EventType.keyDown, location: nil, modifierFlags:[], timestamp: [], windowNumber: 0, context: nil , characters: <#String#>, charactersIgnoringModifiers: <#String#>, isARepeat: false, keyCode: <#UInt16#>)
4

1 回答 1

1

你只需要addLocalMonitorForEvents你的视图控制器

NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
    self.keyDown(with: $0)
    return $0
}

并实现您的自定义 keyDown 方法:

override func keyDown(with event: NSEvent) {
    switch event.keyCode {
    case  123:
        // run left arrow code action
        ship.runAction(
            SCNAction.repeatForever(
                SCNAction.rotateBy(x: 0, y: -2, z: 0, duration: 1)
            )
        )
    case  124:
        // run right arrow code action
        ship.runAction(
            SCNAction.repeatForever(
                SCNAction.rotateBy(x: 0, y: 2, z: 0, duration: 1)
            )
        )
    default:
        print("event.keyCode:", event.keyCode)
    }
}

样本

于 2018-08-04T21:56:40.590 回答