macos - 如何使用 SpriteKit 和 Swift 检测在 OSX 开发中的 SKSpriteNode 上输入的鼠标?

标签 macos swift sprite-kit skspritenode

如果我在 SKScene 中有一个 SKSpriteNode:

let sprite = SKSpriteNode(imageNamed:"Spaceship")

champion.position = CGPointMake(self.size.width/2, self.size.height/2)
champion.setScale(0.25)

self.addChild(champion)

现在我将这个节点添加到场景中后,我想在将鼠标移到该节点上时更改它的颜色。

如何检测鼠标悬停在此节点上以便更改其颜色?

我在 SKSpriteNode 类中看到一个 mouseEntered 事件。 我用那个吗?怎么会被解雇呢?

或者我应该使用其他方法吗?

最佳答案

didMoveToView中,定义一个NSTrackingArea来跟踪鼠标事件并将其添加到 View 中

    let options = [NSTrackingAreaOptions.MouseMoved, NSTrackingAreaOptions.ActiveInKeyWindow] as NSTrackingAreaOptions
    let trackingArea = NSTrackingArea(rect:view.frame,options:options,owner:self,userInfo:nil)
    view.addTrackingArea(trackingArea)

声明一个 Sprite 并将其添加到场景中以进行测试

    let sprite = SKSpriteNode(imageNamed:"Spaceship")
    sprite.name = "sprite"
    sprite.position = CGPointMake(CGRectGetMidX(view.frame), CGRectGetMidY(view.frame));
    sprite.setScale(0.5)
    self.addChild(sprite)

覆盖 mouseMoved 方法

override func mouseMoved(event: NSEvent) {
    // Get mouse position in scene coordinates
    let location = event.locationInNode(self)
    // Get node at mouse position
    let node = self.nodeAtPoint(location)
    if (node.name == "sprite") {
        let sprite = node as SKSpriteNode
        sprite.colorBlendFactor = 1.0
        sprite.color = SKColor.greenColor()
    }
}

最后,当您转换到新场景时,您需要从 View 中移除 NSTrackingArea

override func willMoveFromView(view: SKView) {
    for trackingArea in view.trackingAreas {
        view.removeTrackingArea(trackingArea)
    }

}

关于macos - 如何使用 SpriteKit 和 Swift 检测在 OSX 开发中的 SKSpriteNode 上输入的鼠标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26882215/

相关文章:

objective-c - 为什么 OpenGL 双缓冲在性能方面似乎不一致?

macos - 显示新文档窗口的工作表

ios - '接收器 (<ViewController>) 没有标识符为 'addSegue' 的 segue

swift - 如何使用 Swift 在 XCode UI Automation 中选择随机 tableview 单元格

swift - 将节点的 Sprite 更改为动画 (spriteKit)

ios - 如何从 GameScene 中的 ViewController 调用方法

java - mac intellij idea tomcat无法显示tomcat主页

linux - USB 串行通信提供奇怪的输出

ios - 如何使 UIView 位于 UITabBarController 中所有选项卡的顶部

ios - 当子类化 SKNode 时,Frame 属性是否应该返回非空值?