精灵按钮和图标悬停动画

时间:2016-03-10 00:50:42

标签: objective-c macos sprite-kit skspritenode mousemove

我正在尝试为我的自定义按钮(SKSpriteNodes)和其他也是SKSpriteNode子类的UI对象创建一个效果,这样当鼠标悬停在它们上方时,它们会稍微扩展以指示用户将鼠标悬停在它们上面。一旦鼠标离开精灵附近,精灵应该恢复正常大小。

我最初尝试使用mouseMoved方法,但撤消缩放效果证明是一个问题。有没有更好的方法来处理这个可能在子类本身?想法?

1 个答案:

答案 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
        }
    }
}