在这里的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方法之前,在主循环中进行触摸处理.因此,没有必要在两种方法之间同步资源.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。