一些建議(假設您可以在任何時候創建一個快照,並且您正在存儲前向增量)。
1.如果重放時間短,狀態不是很大,實際上會爲序列中的每個幀生成快照並將其「渲染」爲相反。
2 ..如果整個狀態非常大,那麼只會爲反向重放的最後一幀生成快照。然後將X前向增量應用於快照,以生成反轉重播的第一幀。渲染。然後應用X-1增量,然後渲染,直到X = 0,重播結束時(只是第一個快照)。
// pseudo code for reverse play
first, last = GetReplayRange();
if (playReversed) {
GameState snapShot = GenerateSnapshot(first);
GameState currentState;
currentFrame = last;
while (currentFrame != first) {
// loop from snapshot up to current frame
for (i = first; i < currentFrame; i++) {
currentState = snapShot.AddDetlasTo(currentFrame);
}
Render(currentState);
currentFrame--;
}
}
3 ..如果它的速度太慢,X更新適用於快照,「倒帶」,然後進行一系列的花絮N幀分開,並做相同的反向把戲#2,在較窄的範圍內。
請記住,即使您已準備好呈現顛倒的遊戲狀態 - 您仍然必須呈現所有效果相反的效果,這些效果系統可能不適合使用。
你可以計算最後一個狀態,然後把所有以前的狀態作爲最新狀態作爲初始狀態?也許我誤解了這個問題。 – beta0x64
你是否在每個狀態之間存儲整個狀態或每個狀態之間的增量? – Justicle
看起來像增量 – beta0x64