Sprite 按钮和图标悬停动画
Posted
技术标签:
【中文标题】Sprite 按钮和图标悬停动画【英文标题】:Sprite button and icon hover animation 【发布时间】:2016-03-10 00:50:42 【问题描述】:我正在尝试在我的自定义按钮 (SKSpriteNodes) 和其他也是 SKSpriteNode 子类的 UI 对象上创建一种效果,以便当鼠标悬停在它们上方时,它们会略微扩展以指示用户将鼠标悬停在它们上方。一旦鼠标离开精灵附近,精灵应该回到正常大小。
我最初使用mouseMoved
方法尝试过此操作,但取消缩放效果被证明是一个问题。有没有更好的方法可以在子类本身中处理这个问题?想法?
【问题讨论】:
【参考方案1】:一种方法是简单地跟踪当前悬停的节点(如果有)。像这样。
我添加了一种递归搜索节点父节点的方法,以尝试找到合适的可悬停父节点。在我的示例中为 SKSpriteNode,但在您的情况下为 Producer,除非我弄错了。
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
【讨论】:
感谢您的回复。我一直在尝试实现这一点,但我有几个问题。首先,我的 SKSpriteNode 子类对象包含一个 SKShapeNode 作为子对象,mouseMoved
方法正在检测该类而不是该类的类类型(称为Producer
)。如果我使用 for 循环来获取该点处属于 Producer
类的所有节点,那么将节点缩放回正常会变得很棘手,因为它仅在 Producer
精灵悬停时才会发生变化。我希望这是有道理的……有什么办法吗?以上是关于Sprite 按钮和图标悬停动画的主要内容,如果未能解决你的问题,请参考以下文章