в кратчайшие сроки, как ждать, пока все действия не будут закончены - PullRequest
0 голосов
/ 23 мая 2018

у меня есть какой-то объект 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.

С уважением, Извините за первый неполный пост.

...