0

我正在尝试在 SKScene 中查找鼠标坐标,但是没有调用 moveMouse 函数。 (顺便说一句,这是在 Swift Playground 中)我什至编写了一个打印函数来测试该函数是否被调用,但它绝对没有打印任何内容。

这就是我设置 NSTrackingArea 的方式:

    let options = [NSTrackingAreaOptions.mouseMoved, NSTrackingAreaOptions.activeInKeyWindow, NSTrackingAreaOptions.activeAlways, NSTrackingAreaOptions.inVisibleRect, ] as NSTrackingAreaOptions
    let tracker = NSTrackingArea(rect: viewFrame, options: options, owner: self.view, userInfo: nil)
    self.view?.addTrackingArea(tracker)

这是 mouseMoved 函数(未被调用的函数)

override public func mouseMoved(with event: NSEvent) {

        point = event.location(in: self)
        print(point)
    }

没有调用 mouseMoved 是否有原因?

4

1 回答 1

0

我使用以下代码(并且只有该代码)创建了一个游乐场:

import AppKit
import SpriteKit
import PlaygroundSupport

class Scene:SKScene {
    override public func mouseMoved(with event: NSEvent) {
        let point = event.location(in: self)
        print(point)
    }
}

let frame = CGRect(x:0, y:0, width:1920, height:1080)
let view = SKView(frame:frame)
let scene = Scene(size: CGSize(width: 1080, height: 1080))
scene.backgroundColor = #colorLiteral(red: 0.4078431373, green: 0.7843137255, blue: 0.6509803922, alpha: 1)
scene.scaleMode = .aspectFit

let options = [NSTrackingAreaOptions.mouseMoved, NSTrackingAreaOptions.activeInKeyWindow, NSTrackingAreaOptions.activeAlways, NSTrackingAreaOptions.inVisibleRect, ] as NSTrackingAreaOptions
let tracker = NSTrackingArea(rect:frame, options: options, owner:view, userInfo: nil)
view.addTrackingArea(tracker)

PlaygroundPage.current.needsIndefiniteExecution = true
view.presentScene(scene)
PlaygroundPage.current.liveView = view

然后,我通过单击工具栏中的“显示助手编辑器”按钮打开了操场时间轴视图。我还打开了调试区域,以便可以看到控制台。

此时,时间轴视图显示绿色视图。我将鼠标指针移到绿色视图上,我可以看到在控制台中打印出鼠标坐标。所以,据我所知,上面的代码工作正常。

您能否尝试一下最后的代码,看看会发生什么?

于 2017-03-28T05:35:15.570 回答