Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c SpriteKit中的CCBlinkTo_Objective C_Swift_Sprite Kit - Fatal编程技术网

Objective c SpriteKit中的CCBlinkTo

Objective c SpriteKit中的CCBlinkTo,objective-c,swift,sprite-kit,Objective C,Swift,Sprite Kit,如何在精灵套件中实现类似CCBlink的动作?我想在2分钟内眨眼10次 id blink = [CCBlink actionWithDuration:2.0f blinks:10]; id calBck = [CCCallBlock actionWithBlock:^{ [enemy expired]; }]; [HeroSprite runAction:[CCSequence actions:blink, calBck, nil]]; 本例使用alpha属性创建

如何在精灵套件中实现类似CCBlink的动作?我想在2分钟内眨眼10次

id blink = [CCBlink actionWithDuration:2.0f blinks:10];
id calBck = [CCCallBlock actionWithBlock:^{
           [enemy expired];
    }];
[HeroSprite runAction:[CCSequence actions:blink, calBck, nil]];

本例使用
alpha
属性创建闪烁效果。您还可以使用
hidden
属性和runBlock操作,正如@learncos2d所建议的那样

闪烁时间:2.0/10=0.2,因此每次淡入和淡出都需要0.1秒

    HeroSprite.alpha = 0.0;

    SKAction *blinkSequence = [SKAction sequence:@[
        [SKAction fadeAlphaTo:1.0 duration:0.1],
        [SKAction fadeAlphaTo:0.0 duration:0.1]
    ]];


    [HeroSprite runAction:[SKAction repeatAction:blinkSequence count:10] completion:^{
        [enemy expired];
    }];

我已将答案转换为Swift2.x,但我还希望在闪烁期间将我的节点着色。问题是当您必须处理不同类型的节点时

我已解决并使用以下代码进行了此扩展:

// SKAction extension : blink effect for a generic SKNode, SKShapeNode, SKSpriteNode and SKLabelNode
// Usage:
// self.runAction(SKAction.blink(5)) // fade in and fade out 5 times for 2 seconds
// self.runAction(SKAction.blink(5, duration: 3.0)) // fade in and fade out 5 times for 3 seconds or whatever you want
// self.runAction(SKAction.blink(5, duration: 3.0, colorize: true)) // fade in and fade out 5 times for 3 seconds switching color from red to white
// self.runAction(SKAction.blink(5, duration: 3.0, colorize: true, color1:SKColor.blueColor(), color2:SKColor.yellowColor())) // fade in and fade out 5 times for 3 seconds switching color from custom color2 to custom color1
extension SKAction {
    class func blink(times:Int,duration:NSTimeInterval = 2.0,colorize:Bool = false, color1:SKColor = SKColor.redColor(),color2:SKColor = SKColor.whiteColor())->SKAction {
        let fadeOut = SKAction.fadeAlphaTo(0.0, duration: (duration/Double(times))/2)
        let fadeIn = SKAction.fadeAlphaTo(1.0, duration: (duration/Double(times))/2)
        if colorize {
            var isColorChanged = false
            let colorize = SKAction.customActionWithDuration(0.01, actionBlock: {
                    node, elapsedTime in
                    switch node {
                    case is SKSpriteNode:
                        if !isColorChanged {
                            node.runAction(SKAction.colorizeWithColor(color2, colorBlendFactor: 1, duration: 0.01))
                        } else {
                            node.runAction(SKAction.colorizeWithColor(color1, colorBlendFactor: 1, duration: 0.01))
                        }
                    case is SKShapeNode:
                        (node as! SKShapeNode).fillColor = isColorChanged ? color1 : color2
                    case is SKLabelNode:
                        (node as! SKLabelNode).fontColor = isColorChanged ? color1 : color2
                    default:
                        break
                    }
            })
            let changeColor = SKAction.runBlock({
                isColorChanged = !isColorChanged
            })
            let blink = SKAction.sequence([fadeOut,colorize, fadeIn, changeColor])
            return SKAction.repeatAction(blink, count: times)
        }
        let blink = SKAction.sequence([fadeOut, fadeIn])
        return SKAction.repeatAction(blink, count: times)
    }
}

使用运行块操作切换隐藏属性或一系列非常短的淡入淡出。