アプリケーションには、ゲーム更新スレッドとレンダリング/IO/メインスレッドの2つのスレッドがあります。私の更新スレッドはゲームの状態を更新し、レンダリングスレッドは、ゲームの状態モデルの更新された値と、オブジェクト(gameEngine)内に格納されている他のいくつかの変数に基づいてシーンをレンダリングします。
ゲームスレッドの更新中にレンダリングスレッドが実行されるのは問題なので、解決策は次のように@synchronizedを使用することです。
@synchronized(gameEngine)
{
[gameEngine update];
nextUpdate = now + GAME_UPDATE_INTERVAL;
gameEngine.lastGameUpdateInterval = now - lastUpdate;
gameEngine.lastGameUpdateTime = now;
lastUpdate = now;
}
-update
ただし、レンダリングスレッドは、ブロックの最後の3行との間でgameEngineオブジェクトにアクセスします。どうしてこれなの?