The following responder (defined in NSResponder) does not get called in an SKScene in OSX:
-(void) mouseMoved:(NSEvent *)theEvent {
DLog(@"TEST");
}
I have said the window to accept mouse moved events in the app delegate.
_window.acceptsMouseMovedEvents = YES;
Thank you in advance.
SOLUTION:
Add to the app delegate:
_window.acceptsMouseMovedEvents = YES;
[_window makeFirstResponder:self.skView.scene];
Add to the app delegate:
_window.acceptsMouseMovedEvents = YES;
[_window makeFirstResponder:self.skView.scene];
In swift
window.acceptsMouseMovedEvents = true;
window.makeFirstResponder(self.skView.scene)
You can get at the window object and set it from the scene.
in Swift:
override func willMove(from view: SKView)
{
self.view!.window?.acceptsMouseMovedEvents = true
}
The above answers either make too many assumptions about what’s outside of your SKScene
, or add a touch of unnecessary hackiness by messing with the responder chain.
SKView
is a subclass of UIView
. It inherits, therefore, the viewDidMoveToWindow:
method. You can activate mouse-moved events for all your SKView
s with a simple extension.
extension SKView {
open override func viewDidMoveToWindow() {
super.viewDidMoveToWindow()
window?.acceptsMouseMovedEvents = true
}
}
来源:https://stackoverflow.com/questions/19704444/mousemoved-osx-does-not-get-called-in-a-sprite-kit-skscene