シミュレーションを行うと、シーンを構成するオブジェクトの状態が変化する。 ある時刻での状態を保存しておき、再現することができると、数ステップ前に戻ったり、あるステップのシミュレーションを、力を加えた場合と加えない場合で比べたりといった作業ができる。 Springheadでは、ObjectStatesIfを用いることで、以下のようにシーン全体の状態をまとめてメモリ上に保存、再現することができる。
PHSceneIf* phScene; 省略:phScene(物理シミュレーションのシーン)の構築 UTRef<ObjectStatesIf> states; states = ObjectStatesIf::Create(); // ObjectStatesオブジェクトの作成 states->AllocateState(phScene); // 保存用のメモリ確保 states->SaveState(phScene); // 状態の保存 phScene->Step(); // 仮のシミュレーションを進める 省略:加速度の取得など states->LoadState(phScene); // 状態の再現 states->ReleaseState(); // メモリの開放 省略:力を加えるなどの処理 phScene->Step(); // 本番のシミュレーションを進める