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

前端之家收集整理的这篇文章主要介绍了ios – 在SpriteKit中,touchesBegan在与SKScene更新方法相同的线程中运行吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在这里的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方法之前,在主循环中进行触摸处理.因此,没有必要在两种方法之间同步资源.

猜你在找的iOS相关文章