2014-01-21 70 views
0

我即將在我的遊戲中實現保存/加載功能,並認爲可能使用Windows的小型轉儲文件來實現此目的。我可以使用Windows的小型轉儲文件在我的遊戲中實現「保存」/「還原」嗎?

我沒有這方面的經驗,所以任何幫助,將不勝感激。它甚至有可能嗎?一個正在運行的應用程序可以從(迷你)轉儲文件中「恢復」嗎?

從已發佈的幾個答案中,似乎可以將遊戲狀態存儲在轉儲文件中,因此我將優化問題:我必須投入多少「膠水」才能重新創建我無法存儲的東西在轉儲文件?

+2

不,這是雷區。不建議。 –

+1

沒有辦法從轉儲文件中「重新激活」進程。這是不可能的,因爲很多原因,托馬斯的答案如下。另一個原因是用戶可能在此期間修補了操作系統,導致轉儲文件無用。 –

回答

4

minidump保存應用程序的所有虛擬內存和CPU狀態。到目前爲止,似乎可以從轉儲中恢復所有內容。但事實並非如此,因爲缺少處理信息:當句柄是應用程序內存的一部分時,句柄(內核模式對象)後面的對象已被釋放或重新分配。這意味着以下無法恢復:

  • 線程
  • 過程
  • 文件和目錄
  • 註冊表項
  • 的Windows
  • 活動

您將需要重新分配這些內核資源 - 要做到這一點,你需要實現一個(簽名)內核模式驅動程序。 在考慮實現內核模式驅動程序之前,我會建議考慮另一種保存和加載應用程序狀態的方法。

+0

我的遊戲非常複雜,遊戲/模擬狀態是幾千對象很大,當然內核驅動程序很難實現,但我的(任何)應用程序大部分都是純邏輯,而不是你指定的對象。我細化了我的問題,重點關注答案的確切方面:我必須投入多少「膠水」來重新創建我無法存儲在轉儲文件中的東西? – liorda

+1

我在說的對象是內核模式對象,而不是模擬對象。大多數編程語言都有用於保存對象或對象樹的庫。 –

2

如這裏指出:http://msdn.microsoft.com/en-us/library/windows/desktop/ms680369%28v=vs.85%29.aspx

內存轉儲文件用於調試的目的。你也許可以從這些文件重新創建你的遊戲環境......但是......你爲什麼不寫你自己的文件格式?

+0

這是一項新功能,因此這種解決方案的開發時間可能會更便宜。沒有? – liorda

+0

我不知道,但是,您確定可以選擇這些文件的存儲位置嗎? – Sardik

+2

@liorda你可以在創建轉儲文件時節省開發時間,但是在嘗試從轉儲文件中恢復遊戲狀態時,它會丟失一千次。這就像使用頁面文件作爲保存遊戲格式一樣。確定信息在那裏,但是找到它的好運。 –

0

完成此操作的最佳方法是使用Recovery and Restart框架。簡而言之,當您的應用程序崩潰時,您有機會序列化應用程序重新啓動時需要的任何信息。

相關問題