以下响应程序(在NSResponder中定义)在OSX的SKScene中不会被调用:
-(void) mouseMoved:(NSEvent *)theEvent {
DLog(@"TEST");
}
我已经说过在应用程序委托中接受鼠标移动事件的窗口。
_window.acceptsMouseMovedEvents = YES;
提前谢谢你。
溶液:
添加到应用委托:
_window.acceptsMouseMovedEvents = YES;
[_window makeFirstResponder:self.skView.scene];
添加到应用委托:
_window.acceptsMouseMovedEvents = YES;
[_window makeFirstResponder:self.skView.scene];
In swift
window.acceptsMouseMovedEvents = true;
window.makeFirstResponder(self.skView.scene)
您可以获取窗口对象并从场景中设置它。
在斯威夫特中:
override func willMove(from view: SKView)
{
self.view!.window?.acceptsMouseMovedEvents = true
}
上面的答案要么对你SKScene
之外的东西做出太多假设,要么通过弄乱响应者链来增加一丝不必要的黑客行为。
SKView
是UIView
的一个子类。因此,它继承了viewDidMoveToWindow:
方法。您可以使用简单的扩展程序为所有SKView
激活鼠标移动事件。
extension SKView {
open override func viewDidMoveToWindow() {
super.viewDidMoveToWindow()
window?.acceptsMouseMovedEvents = true
}
}