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

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

概述在这里的Apple文档 Advanced Scene Processing中,它描述了更新方法以及场景的呈现方式,但没有提到何时处理输入.目前尚不清楚它是否与渲染循环位于同一个线程中,或者它是否与它并发. 如果我有一个对象,我从SKScene更新方法和touchesBegan方法(在这种情况下是SKSpriteNode)更新,我是否要担心同步对我的对象的两次访问? 所以几天后没有回答我设置了一些实 在这里的Apple文档 Advanced Scene Processing中,它描述了更新方法以及场景的呈现方式,但没有提到何时处理输入.目前尚不清楚它是否与渲染循环位于同一个线程中,或者它是否与它并发.

如果我有一个对象,我从SKScene更新方法和touchesBegan方法(在这种情况下是SKSpriteNode)更新,我是否要担心同步对我的对象的两次访问?

解决方法 所以几天后没有回答我设置了一些实验.顺便说一句,这些测试是在模拟器上运行而不是在实际设备上运行,但我认为它们是相同的.

首先测试,我在touchesBegan的调试器中设置了一个断点,并查看了堆栈跟踪.似乎touchesBegan是从第一个线程和主循环调用的 – 与逻辑的其余部分相同,所以这对于单线程方法看起来很好.

第二次测试,我覆盖了上面高级场景处理链接中提到的场景中的各种方法,并添加了print语句来显示每个被调用函数的名称.然后我在touchesBegan方法中添加了一个print语句.

在运行应用程序时,输出为:

updatedIDEvaluateActionsdIDSimulatePhysicsdIDApplyConstraintsdIDFinishUpdatetouchesBegan in sceneupdatedIDEvaluateActionsdIDSimulatePhysicsdIDApplyConstraintsdIDFinishUpdateupdate

每当我点击时,这个模式就会重复出现.

除了在dIDFinishUpdate(即一个周期的结束)和更新(下一个周期的开始)之间调用touchesBegan之外,没有任何点击给了我任何东西.

结论:在调用update方法之前,在主循环中进行触摸处理.因此,没有必要在两种方法之间同步资源.

总结

以上是内存溢出为你收集整理的ios – 在SpriteKit中,touchesBegan在与SKScene更新方法相同的线程中运行吗?全部内容,希望文章能够帮你解决ios – 在SpriteKit中,touchesBegan在与SKScene更新方法相同的线程中运行吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1099489.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存