如果我在 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/