rgh*_*ome 7 multithreading touchesbegan touch-event ios sprite-kit
在这里的Apple文档高级场景处理中,它描述了update
方法以及如何渲染场景,但没有提到何时处理输入.目前尚不清楚它是否与渲染循环位于同一个线程中,或者它是否与它并发.
如果我有一个从SKScene
update
方法和touchesBegan
方法更新的对象(在这种情况下为a SKSpriteNode
),我是否要担心同步对象的两次访问?
因此,几天后没有得到答案,我进行了一些实验。顺便说一句,这些测试是在模拟器上运行的,而不是在实际设备上运行的,但我认为它是相同的。
第一次测试,我在调试器中设置了一个断点touchesBegan
并查看了堆栈跟踪。看来是touchesBegan
从第一个线程和循环中调用的main
- 与其余逻辑相同的位置,因此这对于单线程方法来说看起来不错。
第二次测试,我覆盖了上面的高级场景处理链接中提到的场景中的各种方法,并添加了打印语句以显示所调用的每个函数的名称。然后我向该touchesBegan
方法添加了一条打印语句。
运行应用程序时,输出为:
update
didEvaluateActions
didSimulatePhysics
didApplyConstraints
didFinishUpdate
touchesBegan in scene
update
didEvaluateActions
didSimulatePhysics
didApplyConstraints
didFinishUpdate
update
Run Code Online (Sandbox Code Playgroud)
每当我点击时,就会重复这种模式。
除了在(即一个周期的结束)和(下一个周期的开始)touchesBegan
之间被调用之外,没有任何点击给我带来任何其他好处。didFinishUpdate
update
结论:触摸处理发生在调用 update 方法之前的主循环中。因此,没有必要在两种方法之间同步资源。
归档时间: |
|
查看次数: |
510 次 |
最近记录: |