我正在尝试用Android上的opengl进行一个简单的突破游戏,我无法决定是否必须使用单独的线程来处理某些游戏逻辑,比如更新游戏和碰撞检测。我做了一个简单的原型:在自己的线程中绘制和更新彼此的并行。它带来的问题比我想象的要多,所以我想:
我需要多个线程吗?
例如,由于突破游戏,具有6X5块的网格,并且对于每个块,它需要测试
球会碰到这块砖吗?而且每秒约30次。如果我把这段代码放在我的主要绘图循环中:OnDrawFrame(GL10)我恐怕会花费很多渲染时间。
那么我可以回到单线程游戏吗? (因为与.pc相比,Android设备并不那么强大。
答案 0 :(得分:5)
我正在尝试制作一个简单的突破游戏
不,你不需要穿线。
线程不适用于“简单”任务。线程适用于您可以合理地预期性能存在重大问题的任务,这样您实际上可以通过多线程获得某些东西。
通过线程化Breakout克隆会获得什么是编码问题。而已。它只是不足以要求它,如果你不需要线程,你几乎不应该使用它。
答案 1 :(得分:3)
是的,你绝对不应该使用单个线程进行渲染和计算。 另外,你可能会发现实时安卓游戏here上的IO谈话很有用。
答案 2 :(得分:2)
例如,由于突破游戏,有6X5块的网格,并且每个块需要测试
因此,每次更新必须执行30次循环重新测试。我认为目前的计算机速度足够快,每秒可以达到几十万次。
多线程使一些事情变得更容易,并且将渲染和游戏逻辑保持在单独的线程中是一种常见的做法。但在你的情况下,它带来的开销根本不值得努力。此外,性能的提升只能在多核CPU上实现。
答案 3 :(得分:0)
如果您的应用程序应该在多核系统上运行,那么多线程是有意义的。
当线程数超过核心数时,它被称为Oversubscription,这在线程应用程序中通常会产生不良影响,因为它会带来额外的开销。
当您希望某些线程等待相当长的时间(例如,对文件系统进行读/写操作)时,有时需要超额订阅。