gpt4 book ai didi

ios - 按顺序执行未知数量的动画

转载 作者:搜寻专家 更新时间:2023-11-01 07:23:51 27 4
gpt4 key购买 nike

我正在创建一个游戏,用户可以在其中移动 SKShapeNode。现在,我正在尝试编写一个实用函数,它将按顺序执行背靠背动画。

我正在尝试的内容的描述

我首先 dispatch_async 到一个串行线程。然后该线程调用主线程上的 dispatch_sync 来执行动画。现在,为了让动画按顺序运行,我想阻塞 GlobalSerialAnimationQueue 直到动画在主线程上完成。通过这样做,我(理论上)将能够按顺序运行动画。我的代码粘贴在下面以获得更多描述

func moveToCurrentPosition() {
let action = SKAction.moveTo(self.getPositionForCurrRowCol(), duration: 1.0)
dispatch_async(GlobalSerialAnimateQueue) {
//this just creates an action to move to a point
dispatch_sync(GlobalMainQueue, {
self.userNode!.runAction(action) {
//inside the completion block now want to continue
//WOULD WANT TO TRIGGER THREAD TO CONTINUE HERE
}
})
//WOULD LIKE TO PAUSE HERE, THIS BLOCK FINISHING ONLY WHEN THE ANIMATION IS COMPLETE
}
}

所以,我的问题是,我如何编写一个函数来接受动画请求,然后按顺序执行它们?我应该使用什么 grand-central-dispatch 工具,或者我应该尝试一种完全不同的方法?

最佳答案

我想出了如何使用 grand-central-dispatch 信号量来做到这一点。我的更新代码在这里。

func moveToCurrentPosition() {

let action = SKAction.moveTo(self.getPositionForCurrRowCol(), duration: Animation.USER_MOVE_DURATION)
dispatch_async(GlobalSerialAnimateQueue) {
let semaphore = dispatch_semaphore_create(0)
dispatch_sync(GlobalMainQueue, {
self.userNode!.runAction(action) {
//signal done
dispatch_semaphore_signal(semaphore)
}
})
//wait here...
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
}
}

关于ios - 按顺序执行未知数量的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37246827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com