Добавление визуального эффекта в SKSpriteNode при нажатии

Я работаю над своим первым приложением SpriteKit в Xcode 6, программируя в Swift. Теперь я сделал несколько приятных кнопок из прозрачных png-файлов. Но я пытаюсь показать визуальный эффект при нажатии кнопки.

Пример того, как я сейчас показываю статическую кнопку:

let playButton = Button(imageNamed:"playButton")
playButton.position = CGPointMake(self.size.width/2, self.size.height/2 - playButton.size.height * 2.5 - displacement)
self.sharedInstance.addChildFadeIn(playButton, target: self)

Любого эффекта будет достаточно, может быть, импульсный эффект или свечение на прессе. Я искал, но я ничего не могу найти в Swift.

редактировать: больше информации

    class Button: SKSpriteNode {  
        init(imageNamed: String) {
            let texture = SKTexture(imageNamed: imageNamed)
            // have to call the designated initializer for SKSpriteNode
            super.init(texture: texture, color: nil, size: texture.size())
        }
        override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
            self.runAction(SKAction.scaleTo(1.3, duration: kButtonFadingSpeed))
        }    
        override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
            self.runAction(SKAction.scaleTo(1.3, duration: kButtonFadingSpeed))
        }
         override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
            self.runAction(SKAction.scaleTo(1.0, duration: kButtonFadingSpeed))
        }

        required init(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
}

    func addChildFadeIn(node: SKNode, target: SKNode) {
        node.alpha = 0
        target.addChild(node)
        node.runAction(SKAction.fadeAlphaTo(1.0, duration: NSTimeInterval(kAddChildSpeed)))
    }

Функция AddChildFadeIn определяется в классе: singleton

Любая помощь высоко ценится!

2 ответа

Я нашел хорошее решение этой проблемы - скопировать исходный узел, установить альфа копии равным 0,5, поместить его прямо поверх исходного узла и установить его blendMode для добавления. вот образец.

// this is our original node that we want to make glow
playButton.anchorPoint = CGPointMake(0.5, 0.5)

// create a copy of our original node create the glow effect
let glowNode : SKSpriteNode = playButton.copy() as! SKSpriteNode
glowNode.size = playButton.size
glowNode.anchorPoint = playButton.anchorPoint
glowNode.position = CGPoint(x: 0, y: 0)
glowNode.alpha = 0.5
glowNode.blendMode = SKBlendMode.Add

// add the new node to the original node
playButton.addChild(glowNode)

// add the original node to the scene
self.addChild(playButton)

Возможно, вы захотите взглянуть на эту тему. Как создать свечение вокруг спрайта через SKEffectNode, когда некоторые пользователи предложили использовать SKEffectNode. Однако для этого требуется много ресурсов процессора.

Предлагается также использование предложенного SKShapeNode, что также может иметь проблемы с производительностью, и дальнейшее чтение о нем можно сделать здесь. Низкая производительность с SKShapeNode в Sprite Kit.

Другие вопросы по тегам