嗨同行程序員,SDL2加載屏幕/線程
花費數小時試圖完成SDL2中的加載屏幕,我們沒有這樣做。我們正在創建一個簡單的2D開放世界生存遊戲(自上而下),它需要我們爲不同的實體(兔子,樹木,岩石等)加載大量的tilesets/sprite。
起初我們只有一個tileset,包含樹和背景圖塊。但是,現在,地圖從「樣本」50x50的瓷磚地圖擴展到1500x1500的瓷磚地圖。結果:遊戲似乎凍結,但它正在加載瓷磚/圖像。
我們的解決方案:創建一個加載屏幕,我們可以顯示當前正在加載的進度。由於我們的遊戲使用狀態模式來進行遊戲狀態(或者有點像它),我們會有一個PlayState和一個LoadingState。
我們決定使用一個常規的std :: thread加載所有需要的數據並將它們轉換爲紋理。什麼的線程究竟,是這樣的:
- 閱讀JSON文件,其中包含數據,我們的地圖
- 過程檢索到的數據,並從中
- 加載圖像創建tilesets創造紋理
這一切都沒有線程(除了'凍結',它只是加載所有上述內容),但使用線程,就像成功/失敗的60%/ 40%一樣。經過幾小時和幾個小時的搜索,我們發現原因:SDL2 cannot call SDL_CreateTexture來自主線程以外的其他線程。
現在,我們無能爲力,因爲我們不知道如何顯示加載屏幕,執行上述所有操作,而無需創建不同的線程來執行這些操作。因此,我們的問題:是否有任何方法可以實現加載屏幕,我們上面描述的方式?
在此先感謝!
不是爭論,但..如果你花了幾個小時嘗試創建啓動畫面並失敗,並且你打算編寫一個2D開放式世界生存遊戲..我再讀一些教程。 – 2014-11-04 17:23:29
https://bugzilla.libsdl.org/show_bug.cgi?id=1995 – 2501 2014-11-04 17:27:41
@MarcoA。我可能有點誇張,但遊戲本身就可以運行(運行遊戲)。我們已經創建了塊,以處理實體的處理。愚蠢的是,創建一個簡單的啓動畫面,並顯示加載的百分比比看起來更難。換句話說:我們的遊戲已經開始運行,我們的加載屏幕不是。 – 2014-11-04 17:40:40