在此处的 Apple 文档中 Advanced Scene Processing它描述了 update
方法以及如何渲染场景,但没有提及何时处理输入。目前尚不清楚这是否与渲染循环在同一个线程中,或者是否与它并发。
如果我有一个对象,我从 SKScene
update
方法和 touchesBegan
方法(在本例中是 SKSpriteNode
) 我是否需要担心同步对我的对象的两次访问?
最佳答案
因此,在几天没有得到答复后,我进行了一些实验。顺便说一下,这些测试是在模拟器上运行的,而不是在实际设备上运行的,但我认为它会是一样的。
第一次测试,我在调试器中的 touchesBegan
上设置了一个断点并查看了堆栈跟踪。看起来 touchesBegan
是从第一个线程和 main
循环调用的——与其余逻辑相同的地方,所以这对于单线程方法来说看起来不错.
第二次测试,我覆盖了上面高级场景处理链接中提到的场景中的各种方法,并添加了打印语句以显示调用的每个函数的名称。然后我在 touchesBegan
方法中添加了一个打印语句。
运行应用程序时,输出为:
update
didEvaluateActions
didSimulatePhysics
didApplyConstraints
didFinishUpdate
touchesBegan in scene
update
didEvaluateActions
didSimulatePhysics
didApplyConstraints
didFinishUpdate
update
每当我点击时都会重复这种模式。
除了在 didFinishUpdate
(即一个周期结束)和 update之间调用
(下一个开始)。touchesBegan
之外,再多的点击也没有给我带来任何好处
结论:触摸处理发生在调用更新方法之前的主循环中。因此无需在这两种方法之间同步资源。
关于ios - 在 SpriteKit 中,touchesBegan 是否在与 SKScene 更新方法相同的线程中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29755372/