class NattyScene: SKScene {
您可能有节点的自定义字段,或每帧发生的其他内容.现在想象你有一些计算,一个很好的例子可能是重心……
var globalCOG: CGPointfunc updateCOG() { .. say,get all the .position of all Spaceship .. globalCOG = .. some point}
把它放在另一个线程上是很有意义的,假设像
>读取.positions的线程安全/快速
>另一个核心的另一个假定的线程,知道SpriteKit帧(这样你可以用通常的方式计算直到放弃时间等,也许你可能更喜欢跳帧或者其他什么 – 通常的线程游戏编程)
>你可以在线程安全/ blahblah将COG全局写回SpriteKit的其余部分
这是什么交易?
> Swift4 / SpriteKit中现代的成语究竟是什么?
>你如何强迫它进入另一个整体物理核心?
有任何想法吗?
overrIDe func update(_ currentTime: TimeInterval) { let x = safely get info from a thread on another physical core on the device print("Now that's cool")}
在另一个核心……
func loopy() { let x = safely look at info on NattyScene let globalCOG = calculation}
注意,KOD指向了dispatchQueue,这很棒 – 但有没有办法确保它真的在另一个核心?
解决方法 不幸的是,不幸的是我认为这不可能有两个主要原因.原因1
您在iOS中没有这种低级别访问权限.
*** 作系统决定哪个线程在哪个核心上运行.
它还具有根据应用范围之外的多种条件打开和关闭核心的功能.
E.g. When in Grand Central dispatch you write
dispatchQueue.global(qos: .background).async { }
You have no guarantee the closure will be executed on a different core.
原因2
SpriteKit的游戏运行循环确实执行了一堆东西
>通话更新
>评估行动
>模拟物理
>适用约束
您的想法确实意味着在呼叫更新阶段执行以下步骤
>继续“背景”线程
>执行一些繁重的计算
>将结果返回主线程
但此时您无法保证游戏运行循环仍处于呼叫更新阶段.它可能在评估行动中,甚至可能在下一帧工作.
另一方面,渲染每个帧的时间不超过16毫秒.
可能解决方案
您可以充分利用当前核心允许的64位,而不是针对另一个cpu核心.
请看一下有关SceneKit的this Q/A,其中列出了SIMD的优点.
以上是内存溢出为你收集整理的ios – SpriteKit,将流程放在另一个核心上?全部内容,希望文章能够帮你解决ios – SpriteKit,将流程放在另一个核心上?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)