Jor*_*hez 4 macos cocoa objective-c mouseevent
我正在尝试在我的Sprite-kit游戏原型中管理鼠标事件.
我使用问题SO_q中的以下方法
- (void) mouseDown: (NSEvent*) theEvent
{
NSLog(@"Click!");
}
- (void) rightMouseDown:(NSEvent*) theEvent
{
NSLog(@"DERECHA PULSADA!");
}
Run Code Online (Sandbox Code Playgroud)
但检测正确的clic的方法对我不起作用.我想检测单击鼠标右键单击.如何检测鼠标点击何时被删除?
更新:
我尝试了以下的方法,从可可事件处理文件中获取.
- (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;
}
Run Code Online (Sandbox Code Playgroud)
结果:仅处理了左键单击的事件.
在阅读Cocoa事件处理文档后,我尝试覆盖以下方法:
-(void)rightMouseDown:(NSEvent *)theEvent
{
NSLog(@"DERECHO PUSSSHHH!");
}
- (void)rightMouseUp:(NSEvent *)theEvent
{
NSLog(@"Botón Derecho Soltado!");
}
Run Code Online (Sandbox Code Playgroud)
也没用.
更新:
就像我之前说的那样,这些方法都在Sprite-Kit类中.这里是定义这些方法的类定义.
#import <SpriteKit/SpriteKit.h>
@interface OpcionesMenu : SKScene
@end
Run Code Online (Sandbox Code Playgroud)
小智 16
如果您查看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
Run Code Online (Sandbox Code Playgroud)
如果你有兴趣,我会在我的博客上详细说明这一点.
Swift 3 + iOS10:
extension SKView {
open override func rightMouseDown(with theEvent: NSEvent) {
self.scene?.rightMouseDown(with: theEvent)
}
}
Run Code Online (Sandbox Code Playgroud)
迅速:
extension SKView {
public override func rightMouseDown(theEvent: NSEvent) {
self.scene?.rightMouseDown(theEvent)
}
}
Run Code Online (Sandbox Code Playgroud)
并将其添加到您的SKScene子类
override func rightMouseDown(theEvent: NSEvent) {
let location = theEvent.locationInNode(self)
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4113 次 |
| 最近记录: |