首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SKEffectNode渐进式模糊SKShapeNode

使用SKEffectNode渐进式模糊SKShapeNode
EN

Stack Overflow用户
提问于 2014-07-06 11:09:55
回答 3查看 2.4K关注 0票数 5

我正在尝试模糊我的程序中的SKShapenode。但是,我希望shapenode逐渐模糊,持续时间约为1秒。我该如何做到这一点?当前的代码会立即模糊它。

代码语言:javascript
复制
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)           
}
EN

回答 3

Stack Overflow用户

发布于 2014-07-06 12:44:04

SKScene子类(或委托)中实现update方法。

代码语言:javascript
复制
filter.setValue(10, forKey: "inputRadius")

除了不传递值10之外,根据运行时间在0到10之间进行插值。

因此,您可以考虑改为伪装它。创建两个节点,其中一个具有模糊效果,然后使用fadeInWithDuration/fadeOutWithDuration操作淡入模糊节点和淡出未模糊节点。

票数 6
EN

Stack Overflow用户

发布于 2014-07-06 14:33:21

我同意“rickster”的说法。在苹果spritekit的演示中,他们用它来模拟灯光的闪烁(灯光从屏幕上逐渐淡出-->模糊灯光)。

代码语言:javascript
复制
- (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“的行为以适应您的情况。

票数 1
EN

Stack Overflow用户

发布于 2017-11-15 20:01:35

给你伙计,Swift4 SpriteKit:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24592374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档