у меня есть какой-то объект 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.
С уважением, Извините за первый неполный пост.