objective-c – 检测鼠标右键单击可可

我正在尝试在我的Sprite-kit游戏原型中管理鼠标事件.

我使用了问题SO_q中的以下方法

- (void) mouseDown: (NSEvent*) theEvent
{
    NSLog(@"Click!");
}

- (void) rightMouseDown:(NSEvent*) theEvent
{
    NSLog(@"DERECHA PULSADA!");
}

但检测正确的clic的方法对我不起作用.我想检测单击鼠标右键单击.
如何检测鼠标点击何时被删除

更新:

我尝试了下面的方法,从Cocoa Event Handling Doc开始接收.

- (void)mouseDown:(NSEvent *)theEvent 
{
        switch ([theEvent type])
        {
            case NSLeftMouseDown:
                NSLog(@"ISQUIERDO down!");
                break;
            case NSLeftMouseUp:
                NSLog(@"IZQDO soltado!");
                break;
            case RightMouseDown:
                NSLog(@"DERECHO PUSSSHHH!");
                break;
            case NSRightMouseUp:
                NSLog(@"Botón Derecho Soltado!");
                break;
            default:
                /* Ignore any other kind of event. */
                break;
        }

    return;
}

结果:仅处理了左键单击的事件.

在阅读了Cocoa Event Handling Doc之后,我尝试覆盖以下方法

-(void)rightMouseDown:(NSEvent *)theEvent
{
    NSLog(@"DERECHO PUSSSHHH!");
}

- (void)rightMouseUp:(NSEvent *)theEvent
{
    NSLog(@"Botón Derecho Soltado!");
}

也没用.

更新:

就像我之前说的那样,这些方法都在Sprite-Kit类中.这里是定义这些方法类定义.

#import <SpriteKit/SpriteKit.h>

@interface OpcionesMenu : SKScene

@end

解决方法

如果您查看Apple的 NSView文档,您会看到NSView的rightMouseDown实现:不会将事件直接发送到响应程序链,而是直接通过调用menuForEvent:来处理事件.

SKView是NSView的子类,所以我通过向SKView添加一个类别并实现我自己的rightMouseDown:来解决了这个问题.我的版本rightMouseDown:只调用我的场景实现rightMouseDown:,这是我实际在我的场景上执行操作的地方. SKView有一个属性,场景,其中包含对当前呈现场景的引用.因此,我的rightMouseDown的类别实现:如下所示:

ObjC:

@implementation SKView (Right_Mouse)
-(void)rightMouseDown:(NSEvent *)theEvent {
     [self.scene rightMouseDown:theEvent];
}
@end

如果您有兴趣,我会在blog上详细说明这一点.

Swift 3 iOS10:

extension SKView {
  open override func rightMouseDown(with theEvent: NSEvent) {
    self.scene?.rightMouseDown(with: theEvent)
  }
}

迅速:

extension SKView {
    public override func rightMouseDown(theEvent: NSEvent) {  
        self.scene?.rightMouseDown(theEvent)
    } 
}

并将其添加到您的SKScene子类

override func rightMouseDown(theEvent: NSEvent) {
    let location = theEvent.locationInNode(self)
    ...
}

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...