2016-12-03 81 views
0

我使用命令模式後追蹤「回放」運動。當我這樣做時,動作會正確重播,但速度會更慢。我已經嘗試了兩個協程,並且Update(),問題依然存在。Unity |命令模式播放時間差

我第一次有一個祈求PlayerControl持有的ICommand的列表。

//Properties 
private List<ICommand> oldCommands = new List<ICommand>(); 
private int updateIterationTracker = 0; 

對於每一個調用的命令,我將命令添加到列表中。

//If Input moves up, invoke the move up command 
if (dirVector.y > 0) 
{ 
    oldCommands.Add(dirUp); //Add the command to the list of commands 
    dirUp.Execute(); 
} 

在某些時候「重放」被觸發,我在命令中oldCommands迭代。

此功能工作。就像移動輸入一樣,觸發命令移動執行。

private void IterateUpdateOnReplay(){ 
    if(iteration < oldCommands.Count){ 
     transform.position = replayStartPosition; 
    } 
    oldCommands[iteration].Execute(); 
    iteration++; 
} 

我在協同程序中也這樣做了。

回放可以以正確的順序執行的動作和可能發生的動作,但所花費的時間來執行整個序列比它採取在初始記錄的時間長。 播放時間更長。

問題:

1)是初始捕獲

oldCommands.Add(dirUp); //Add the command to the list of commands 

加入過多的命令,在正確的速度回放,慢下來的執行時間?

2)是否有可能造成這種延遲,我不知道的另一個問題?

+0

您需要對遊戲對象進行抽樣以保存其位置,然後將數據存儲在課堂中。可能每秒30次?這取決於你想要它有多光滑。然後,您可以稍後循環播放它們,然後在存儲的類中延遲時間。從[這裏]開始(http://stackoverflow.com/a/40732139/3785314)。 – Programmer

+0

那豈不是違背命令模式的意義呢?不要爲類存儲所有數據,只需按相同的順序調用相同的命令,並且重放應該相同。 – Ryanthehouse

回答

0

我重構了整個過程並解決了問題。在我的移動命令,我不得不將清除運動的命令(最初是基於速度,速度設置爲零)。這發生在每一幀,不允許速度繼續按下按鈕之外的移動。

保存此命令使存儲在列表中的命令翻倍,導致播放花費更長時間。當我將運動更改爲位置更新並移除清除命令時,重播被糾正並且回放正常。