-mouseMoving OSX在精灵套件SKScene中不会被调用



以下响应程序(在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之外的东西做出太多假设,要么通过弄乱响应者链来增加一丝不必要的黑客行为。

SKViewUIView的一个子类。因此,它继承了viewDidMoveToWindow:方法。您可以使用简单的扩展程序为所有SKView激活鼠标移动事件。

extension SKView {
    open override func viewDidMoveToWindow() {
        super.viewDidMoveToWindow()
        window?.acceptsMouseMovedEvents = true
    }
}

最新更新