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 按钮和图标悬停动画的主要内容,如果未能解决你的问题,请参考以下文章

Jquery鼠标悬停按钮图标动态变化效果

Sprite-Kit 中的按钮按下动画

自制按钮图标的两种方法: image sprite和svg字体文件

在菜单组件中鼠标悬停时更改按钮的图标和文本颜色

css 脉冲动画按钮(悬停和焦点)

如何通过将鼠标悬停在同一页面上的图像上来触发 CSS 动画按钮