我正在尝试为我的自定义按钮(SKSpriteNodes)和其他也是SKSpriteNode子类的UI对象创建一个效果,这样当鼠标悬停在它们上方时,它们会稍微扩展以指示用户将鼠标悬停在它们上面。一旦鼠标离开精灵附近,精灵应该恢复正常大小。
我最初尝试使用mouseMoved
方法,但撤消缩放效果证明是一个问题。有没有更好的方法来处理这个可能在子类本身?想法?
答案 0 :(得分:0)
这样做的一种方法是简单地跟踪当前悬停的节点(如果有的话)。这样的事情。
我已经添加了一种递归搜索父节点的方法,以尝试找到合适的可恢复父节点。在我的例子中,SKSpriteNode,但在你的情况下生产者,除非我错了。
class GameScene: SKScene {
var hoverNode: SKSpriteNode?
//Setup
override func mouseMoved(theEvent: NSEvent) {
let location = theEvent.locationInNode(self)
if let node = findHoverable(self.nodeAtPoint(location)) {
if (node == hoverNode) { return }
node.removeAllActions()
node.runAction(SKAction.scaleTo(1.2, duration: 0.5))
hoverNode = node
} else {
if let hoverNode = hoverNode {
hoverNode.removeAllActions()
hoverNode.runAction(SKAction.scaleTo(1.0, duration: 0.5))
self.hoverNode = nil
}
}
}
private func findHoverable(node: SKNode) -> SKSpriteNode? {
if let node = node as? SKSpriteNode {
return node
}
if let parent = node.parent {
if let parent = parent as? SKSpriteNode {
return parent
} else {
return findHoverable(parent)
}
} else {
return nil
}
}
}