俺はオブジェクト指向で、シングルスレッドだな。

常にメインループ内で、オブジェクトの描画、行動、当たり判定が行われてる。
また一方で、オブジェクト発生イベントのリストを持っていて、
順次、メインループにオブジェクトが登録されていく。

この「オブジェクト発生イベントのリスト」はシーンに相当していて、
シーンを切替えたければ、今登録されているオブジェクトを破棄して、
イベントのリストを差し替えるだけでいい。

while (1) {
  for i=0...
  {
    オブジェクト[i]->行動();
    オブジェクト[i]->描画();
    オブジェクト[i]->当たり判定();
  }
  イベント発生()
}