我有一个简单的iPhone游戏,由两个“线程”组成:主游戏循环,所有更新和渲染每秒发生30次(NSTimer)......以及每秒调用加速度计代表100次的“线程” 。我有一个变量“xPosition”,它在游戏循环中使用的加速计代表函数和中更新。是否有可能两个“线程”试图同时使用xPosition(因此导致崩溃或其他问题)。如果是这样,我怎样才能解决这个对游戏性能影响最小的问题?
我一直在使用这个设置进行了数月的开发和增量测试,我从来没有遇到过任何问题。
干杯!
答案 0 :(得分:2)
如果您的NSTimer
任务和游戏循环都是从主线程运行的,那么您不会遇到任何问题,因为它们中只有一个会同时执行。此外,他们都不能抢占对方。
但是如果你使用不同的线程,你必须在游戏循环中使用xPosition
时要小心,因为它的值可能随时从另一个线程更新 - 即使只有一个处理器。过去这个的一个简单方法是将xPosition
的值赋给游戏循环中的局部变量,并且只为循环中的每次运行引用此变量。
答案 1 :(得分:1)
如果它只在加速度计线程中更新,则没有太多问题。最糟糕的情况是渲染线程不会看到加速度计线程对数据的更改。由于您在单个处理器上运行,因此不太可能发生。如果在源代码中将变量标记为“volatile”,则可以解决后一个问题。