例如,打砖块游戏有一个6X5个方块的网格,对于每个方块,它需要测试球是否触碰到该方块,而且每秒约30次。如果将此代码放入我的主要绘图循环OnDrawFrame(GL10)中,我担心它会花费大量渲染时间。我需要多于一个线程吗?
那么,我可以回到单线程游戏吗?(因为Android设备与PC相比不太强大)。
例如,打砖块游戏有一个6X5个方块的网格,对于每个方块,它需要测试球是否触碰到该方块,而且每秒约30次。如果将此代码放入我的主要绘图循环OnDrawFrame(GL10)中,我担心它会花费大量渲染时间。我需要多于一个线程吗?
是的,你绝对不应该仅使用一个线程进行渲染和计算。
另外,您可能会发现关于实时Android游戏的IO讲座在这里很有用。
例如,一个打砖块游戏有一个6X5的方块网格,对于每个方块,它需要进行测试。
所以你每次更新时必须执行30个圆形-矩形测试。我认为当前的计算机足够快,可以每秒执行几十万次。
多线程使一些事情变得更容易,将渲染和游戏逻辑保持在不同的线程中是一种常见做法。但在你的情况下,带来的开销根本不值得。而且性能的提升只能在多核CPU上实现。
如果您的应用程序需要在多核系统上运行,那么多线程就有意义了。
当线程数超过核心数时,这被称为超额订阅,这通常是线程应用程序中的不良影响,因为它会增加额外的开销。
有时候,当您期望某些线程等待相当长的时间(例如文件系统上的读/写操作)时,超额订阅是有意义的。
OnDrawFrame(GL10)
,当通过GLSurfaceView使用OpenGL|ES时,该代码已经在单独的线程上运行(即GLThread,该类创建)。 - MichalisB