在swift中如何等到所有的skaction完成

时间:2018-05-23 15:05:07

标签: swift sprite-kit skaction

我有一些对象SKSprite,当触摸它时我运行SKAction(比例和颜色)当我们触摸所有好的精灵(集团)我想要运行另一个动作“取消选择所有集团” 为此,我在每个sksprite上运行一个动作比例和颜色(转到原始颜色),但我看到奇怪的效果,动作没有排队 一些集团不会回到原来的大小,这意味着规模没有完成。 我无法理解为什么,我可以同时运行所有动作,因为触摸精灵时会产生初始比例和颜色,并且在选择最后一个精灵后取消选择所有精灵 不确定我有好的解释吗?

在GameBloc类(又名SKSprite)上运行的代码

class GameBloc : SKSpriteNode

GameBloc类中的动画函数

func animateBloc()
{
    let withDuration:Double         = Constants.UI.C_0101100_GAMEPLAY_ANIMATION_DURATION
    let initialBlocScale:CGFloat    = self.xScale
    let initialFontScale:CGFloat    = self.label!.xScale
    let scaleBlocLessAction = SKAction.scale(to: (initialBlocScale * 0.85) , duration: (withDuration/2.0))
    let scaleBlocNormalAction = SKAction.scale(to: initialBlocScale , duration: (withDuration/2.0))
    let scaleLabelLessAction = SKAction.scale(to: (initialFontScale * 0.85) , duration: (withDuration/2.0))
    let scaleLabelNormalAction = SKAction.scale(to: initialFontScale , duration: (withDuration/2.0))
    var blocColor:Int = Constants.UI.C_0101100_COLOR_BLOC_SELECTED
    var labelColor:Int = Constants.UI.C_0101100_COLOR_BLOC_SELECTED_LABEL

    // coloration en fonction du select ou unselect, le reste est identique
    if(self.selected==false)
    {
        blocColor = Constants.UI.C_0101100_COLOR_MEDIUMGRAY
        labelColor = Constants.UI.C_0101100_COLOR_BLOC_LABEL
    }
    let colorBlocAction = SKAction.colorize(with: Constants.UI.colorsArray[self.appDelegate.theme][blocColor], colorBlendFactor: 1, duration: withDuration)
    let colorLabelAction = self.changeColorForLabelNode(toColor: Constants.UI.colorsArray[self.appDelegate.theme][labelColor],withDuration: withDuration)

    // animation de coloration
    self.run(SKAction.group([SKAction.sequence([scaleBlocLessAction, scaleBlocNormalAction]), colorBlocAction]))
    self.label?.run(SKAction.group([SKAction.sequence([scaleLabelLessAction, scaleLabelNormalAction]), colorLabelAction]))
}

以及如何取消选择所有集团 这是在GameScene中调用

func unSelectAllBlocs()
{
    // on va deselectionner tous les blocs actuellement selectionne
    for index:Int in stride(from: 0, to: blocSelectedArray.count, by: 1)
    {
        // on deselectionne les blocs
        print("** Unselect bloc at index=\(blocSelectedArray[index])")
        blocArray[blocSelectedArray[index]].selected = false

        // on va creer le tableau de SKAction
        blocArray[blocSelectedArray[index]].animateBloc()
    }

    // vider le tableau des blocs selectionne
    blocSelectedArray.removeAll()

    // on reinitialise le nombre calculé
    numberComputed = 0
}

我的意思是追加是在最后一次SKAction运行未完成后的未选择开始 我的问题是我必须要做的是等待所有GameBloc的所有操作都完成后再运行其他新的SKAction。

此致 对不起,第一封不完整的帖子。

0 个答案:

没有答案