gpt4 book ai didi

ios - 在 SpriteKit 中,touchesBegan 是否在与 SKScene 更新方法相同的线程中运行?

转载 作者:可可西里 更新时间:2023-11-01 03:32:15 24 4
gpt4 key购买 nike

在此处的 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/

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