ios - Agregar un efecto visual a un SKSpriteNode cuando se presiona
swift sprite-kit (2)
Estoy trabajando en mi primera aplicación SpriteKit en Xcode 6, codificación en Swift. Ahora he creado algunos bonitos botones a partir de archivos png transparentes. Pero estoy tratando de mostrar un efecto visual cuando se presiona el botón.
Ejemplo de cómo ahora muestro un botón estático:
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)
Cualquier efecto sería suficiente, tal vez un efecto de pulso o brillo en la prensa. He buscado, pero realmente no puedo encontrar nada en Swift.
editar: más información
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)))
}
La función AddChildFadeIn
se define en clase: singleton
¡Cualquier ayuda es muy apreciada!
Encontré una buena solución para este problema es copiar el nodo original, establecer el alfa de la copia en 0.5 colocarlo directamente sobre la parte superior del nodo original, y configurar su blendMode para agregar. aquí hay una muestra
// 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)
Es posible que desee echarle un vistazo a este hilo. ¿Cómo puede crear un resplandor alrededor de un objeto a través de SKEffectNode donde algunos usuarios han propuesto el uso de SKEffectNode? Sin embargo, se necesita mucho poder de CPU para hacer eso.
También está el uso de SKShapeNode propuesto, que también podría tener problemas de rendimiento y se puede seguir leyendo sobre él aquí. Bajo rendimiento con SKShapeNode en Sprite Kit .