在这里的Apple文档
Advanced Scene Processing中,它描述了更新方法以及场景的呈现方式,但没有提到何时处理输入.目前尚不清楚它是否与渲染循环位于同一个线程中,或者它是否与它并发.
如果我有一个对象,我从SKScene更新方法和touchesBegan方法(在这种情况下是SKSpriteNode)更新,我是否要担心同步对我的对象的两次访问?
解决方法
所以几天后没有回答我设置了一些实验.顺便说一句,这些测试是在模拟器上运行而不是在实际设备上运行,但我认为它们是相同的.
首先测试,我在touchesBegan的调试器中设置了一个断点,并查看了堆栈跟踪.似乎touchesBegan是从第一个线程和主循环调用的 – 与逻辑的其余部分相同,所以这对于单线程方法看起来很好.
第二次测试,我覆盖了上面高级场景处理链接中提到的场景中的各种方法,并添加了print语句来显示每个被调用函数的名称.然后我在touchesBegan方法中添加了一个print语句.
在运行应用程序时,输出为:
update didEvaluateActions didSimulatePhysics didApplyConstraints didFinishUpdate touchesBegan in scene update didEvaluateActions didSimulatePhysics didApplyConstraints didFinishUpdate update
每当我点击时,这个模式就会重复出现.
除了在didFinishUpdate(即一个周期的结束)和更新(下一个周期的开始)之间调用touchesBegan之外,没有任何点击给了我任何东西.
结论:在调用update方法之前,在主循环中进行触摸处理.因此,没有必要在两种方法之间同步资源.