2015-10-13 62 views
0

我有一些奇怪的問題,其中我不明白的起源。Linux SDL2應用程序沒有外部透明代碼:: Blocks IDE

我有一個SDL2應用程序構建並在Windows上工作,現在我試圖構建一個Linux版本。我在兩個系統上都使用了Code :: Blocks。在Linux中的Code :: Blocks中設置所有路徑和庫之後,它將正常構建並運行。

normal behaviour

但是當我移動可執行文件和所有需要的文件到單獨的目錄,我突然接到了奇怪的現象:所有圖像現在已經失去了它們的透明度和他們正在尋找非常混亂。

我只是不明白這是怎麼回事。爲什麼一切都在IDE內工作,當你試圖像普通的可執行文件一樣運行它時,會發生這樣的奇怪事情?

+0

聽起來像是有關透明度模塊缺失由於被包含在項目文件夾之外的相對路徑中,但是如果沒有更多信息很難分辨出來。 –

+0

這是什麼意思?我以爲你只需要提供一個路徑到圖書館(SDL2,SDL2_image等),它會照顧其餘的。 我把我的所有庫放在lib /文件夾中,並創建了一個運行腳本,它只是執行「export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:lib」,然後運行該應用程序。 – xterminal86

+0

我設法通過調用SDL_SetTextureBlendMode(_texture,SDL_BLENDMODE_NONE)來重現IDE中的效果。 但是,當我試圖強制這個調用SDL_SetTextureBlendMode(_texture,SDL_BLENDMODE_BLEND),然後建立一個可執行文件並從IDE之外的單獨目錄運行,我也得到了同樣的奇怪行爲。 :-( 也許它是平臺特定的,因爲在Windows上我沒有這樣的問題。 – xterminal86

回答

0

好的,這是事情:我發現,如果我從文件管理器運行我的可執行文件(即通過單擊run.sh腳本),一切都很好。但是如果我嘗試從命令行運行這個腳本,我會遇到透明度問題。

雖然我仍然在SDL_SetTextureBlendMode調用中收到關於「Invalid renderer」的錯誤,但它們可能並沒有真正相關,因爲我可能忘記檢查每個其他SDL調用的錯誤,並且該報告只是來自另一個調用的剩餘部分。

但是,有沒有人有任何想法,爲什麼它是這樣呢?

當我用Linux下載圖形下載最新版本的ADOM時,我得到了這種解決方案。我選擇了Debian 6.0.5版本作爲最接近我的版本 - 我有7個版本。當我嘗試從命令行運行遊戲時,我得到了與我的應用程序相同的透明度問題。然後,我決定嘗試通過點擊可執行文件從文件瀏覽器運行它 - 瞧!一切正常。

WTF ...

只是爲了信息,我run.sh腳本,我用來運行exe文件,如下所示:

#!/bin/sh 

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:lib 
./Asteroids-x64