检测滚轮运动和方向

Jor*_*hez 3 macos objective-c mousewheel sprite-kit

我正在使用新的Sprite-Kit框架编写游戏,并希望使用鼠标滚轮更改玩家的枪.首先,我想在滚轮移动时进行处理.我从Cocoa事件处理指南中尝试了以下方法

- (void)scrollWheel:(NSEvent *)theEvent
{
    NSLog(@"SCROOOOOOOLL iN MOVeMENT");
}
Run Code Online (Sandbox Code Playgroud)

结果:什么都没有,我移动鼠标滚轮时没处理.

我知道如何处理这个事件?

更新:我看到两个答案讨论来自NSResponder或NSView的类派生,但我的类派生自SKScene,我使用Sprite-kit框架进行编程,而obj-c不允许多重继承.

这里的类定义:

    #import <SpriteKit/SpriteKit.h>

@interface OpcionesMenu : SKScene

@end
Run Code Online (Sandbox Code Playgroud)

mar*_*rux 5

即使SKScene源自NSResponder,它也不是AppKit事件的直接接收者.相反,容纳场景的SKView(派生自NSView/ UIView)处理事件.您可以通过在场景的mouseDown方法上设置断点来观察此情况:

 -[TWTMyScene mouseDown:]
 -[SKView mouseDown:] ()
 -[NSWindow sendEvent:] ()
 -[NSApplication sendEvent:] ()
 -[NSApplication run] ()
  NSApplicationMain ()
Run Code Online (Sandbox Code Playgroud)

因此,您可以自己子类化SKView并转发scrollWheel事件.或者,如果您喜欢危险地生活,您可以在任何代码的末尾粘贴此类别,它将为您处理:

@implementation SKView(ScrollTouchForwarding)

- (void)scrollWheel:(NSEvent *)event {
    [self.scene scrollWheel:event];
}

@end
Run Code Online (Sandbox Code Playgroud)