我正在尝试模糊我的程序中的SKShapenode。但是,我希望shapenode逐渐模糊,持续时间约为1秒。我该如何做到这一点?当前的代码会立即模糊它。
func generateAnimation() {
var blurAction : SKAction = SKAction.runBlock{
//the method below returns a shapeNode
var circle = self.generateImage()
var effect : SKEffectNode = SKEffectNode()
var filter : CIFilter = CIFilter(name:"CIGaussianBlur")
filter.setValue(10, forKey: "inputRadius")
effect.filter = filter
effect.addChild(circle)
self.addChild(effect)
}发布于 2014-07-06 12:44:04
在SKScene子类(或委托)中实现update方法。
filter.setValue(10, forKey: "inputRadius")除了不传递值10之外,根据运行时间在0到10之间进行插值。
因此,您可以考虑改为伪装它。创建两个节点,其中一个具有模糊效果,然后使用fadeInWithDuration/fadeOutWithDuration操作淡入模糊节点和淡出未模糊节点。
发布于 2014-07-06 14:33:21
我同意“rickster”的说法。在苹果spritekit的演示中,他们用它来模拟灯光的闪烁(灯光从屏幕上逐渐淡出-->模糊灯光)。
- (SKSpriteNode *)newLight
{
SKSpriteNode *light = [[SKSpriteNode alloc] initWithColor:[SKColor yellowColor] size:CGSizeMake(8,8)];
SKAction *blink = [SKAction sequence:@[
[SKAction fadeOutWithDuration:0.25],
[SKAction fadeInWithDuration:0.25]]];
SKAction *blinkForever = [SKAction repeatActionForever:blink];
[light runAction: blinkForever];
return light;
}您可以修改"blinkForever“的行为以适应您的情况。
发布于 2017-11-15 20:01:35
给你伙计,Swift4 SpriteKit:
let ITEM_MAX_BLUR_AMOUNT: CGFloat = 20
let ITEM_MIN_BLUR_AMOUNT: CGFloat = 0
let ITEM_FOCUS_DURATION: TimeInterval = 0.2
let effectNode: SKEffectNode = SKEffectNode()
effectNode.filter = CIFilter = CIFilter(name: "CIGaussianBlur")
effectNode.shouldEnableEffects = true
addChild(effectNode)
let focusAction = SKAction.customAction(withDuration: ITEM_FOCUS_DURATION, actionBlock: { (node : SKNode!, elapsedTime : CGFloat) -> Void in
let fraction = CGFloat(elapsedTime / CGFloat(ITEM_FOCUS_DURATION))
let deltaBlur: CGFloat = ITEM_MAX_BLUR_AMOUNT-ITEM_MIN_BLUR_AMOUNT
let blurAmount = ITEM_MAX_BLUR_AMOUNT-deltaBlur*fraction
(node as! SKEffectNode).filter!.setValue(blurAmount, forKey: kCIInputRadiusKey)
})
focusAction.timingMode = .easeIn
effectNode.run(focusAction)https://stackoverflow.com/questions/24592374
复制相似问题