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