玩一些遊戲切換出去之後就無法再次運行的原因是什麼?

多見於比較老的國產單機遊戲,模擬器遊戲和一些盜版遊戲,

情況是有些切換回來直接黑屏,

彈出對話框,直接未響應,原因是什麼呢?


針對題主所描述的現象,我可以百分百斷定是D3D設備丟失的處理沒有做好。

下面是一些技術層面的解答,不想看的可以略過:

windows規定,在鎖定計算機,屏保,win+Tab切換以及各種可能出現的窗口焦點丟失情況下,所有創建的D3DDevice都會處於lost狀態。這個時候再使用這個D3D設備來渲染任何元素都會失敗,但是在這種情況下調用它的返回值,仍舊是正確的。所以需要開發者主動的調用探詢介面來判定D3D的有效性。

以上說了這麼繞的一串話,就是想說,D3D的設備丟失很操蛋,但是你又必須,不得不處理。而且一旦出現丟失,必然是在這之前的所有D3D對象全都丟失。所以,根據我多年的遊戲經驗,對這種問題的處理,大體被分為三大類。第一類,也是大部分遊戲廠商直接就是不管它,假設用戶不會在玩遊戲時做其它事,如果真的丟失了,那就讓它crash吧。第二類,會去探測D3D設備是否丟失,如果丟失,那麼就把當前所有的D3D設備全部銷毀,然後重建。這樣導致的結果就是界面跟幻燈片一樣黑一下,亮一下,重複1秒就幾秒不等。第三類,按照微軟的推薦做法,做專門的DeviceLost處理,它跟第二類的區別是不用銷毀原來的D3D設備,但是還是要銷毀其中的某些資源,另外對某些資源調lost介面。

總之,只要你想管它,就對系統的架構瞬間提升了N個檔次的要求。沒點能力根本掌控不住。如果不管它,喲喲喲,不要太輕鬆。

==================================================================

順便對一些猜測表示否定:

就是說是怕用戶切出去掛HOOK的,實在太站不住腳了!忍不住要吐個槽啊!作為一個用戶體驗至上的遊戲程序,你單單只怕個別玩家切出去(僅僅是切出去啊!!!)做壞事就讓程序crash,你做的不是程序吧!是病毒吧!!!


【人生第一次,反對最高票的答案】

為啥反對:

因為這麼做是沒有意義的。

任何一個需要自己畫圖的遊戲我們都可以HOOK之並自己調用寫字,告訴玩家按哪些快捷鍵來開啟功能。

早期的CF輔助也都是這麼做的。

無法切回來的原因最大的一點就是:

他們沒有做好D3D設備丟失的處理。

不要小看這個處理,很多國產網遊都是在FIFA這類大型3D遊戲做出來完美的全屏D3D設備丟失之後,才開始逐步解決這個問題的。

後來出現了處理的跟大神一個級別的遊戲,就是LOL,很多這種需要載入界面的3D遊戲,你在載入界面切出去切回來都是黑屏/白屏的。原因我也沒仔細研究,但是LOL完美的處理了。

能處理設備丟失之後並且迅速重新載入的也是LOL(可能是我接觸的遊戲不多),類似於CF/CS這種,你切出去再切回來,會發生的事情會更多,掉幀/其他資源丟失,這些都是非常致命的。LOL在設備重新創建時,能在很短的時間內載入完所有的資源(掉幀會持續1-2秒).

具體可以參考:

如何實現D3D全屏與窗口的轉換


有技術的原因。

早期Illusion的工口遊戲大部分都無法切回來。


據我所知至少有一部分原因是防止用戶使用修改器修改遊戲。


一般是程序沒處理好,發生d3d的設備丟失(device lost)可以自己搜索一下。


樓主這個問題讓我想到CS1.5了,估計大伙兒應該都經歷過。


仙劍3就是這種情況,據說是為了防止使用修改器。有時一個彈窗就回到桌面了,再進就悲劇。


推薦閱讀:

爐石傳說12.11任務無法接取的bug是怎麼回事?
如何看待陰陽師業火原bug事件?
WIN10將文件或文件夾固定到快速訪問,提示參數錯誤,怎麼解決?
你遇到過哪些有趣的bug?
不小心敲了 rm -rf / 後反應是怎樣的?

TAG:遊戲 | 軟體 | Bug | 軟體測試 | 遊戲Bug |