2012-09-18 68 views
1

我正在學習如何使用allegro庫,並在使用set_gfx_mode函數時,如果我使用GFX_AUTODETECT_FULLSCREEN作爲第一個參數,那麼在運行編譯後的應用程序時,窗口將全屏顯示,跑步,所有的顏色都會改變。使用任何其他圖形模式都不會發生,但在兩臺獨立的機器上,只有在切換到全屏模式後,顏色纔會發生變化。有沒有其他人看到過這種情況?我根本找不到關於這個問題的任何討論。Allegro在全屏模式下的顏色變化

我使用的是預編譯的快板4.4.2庫Visual Studio 2010和運行Windows 7的

回答

2

快板4是舊的,使用由現代操作系統不再很好的支持的API。全屏模式將成爲越野車,尤其是在8位圖形上。得到一個可靠的全屏幕的最佳方式是兌現用戶的當前桌面設置:

int w, h; 
get_desktop_resolution(&w, &h); 

set_color_depth(desktop_color_depth()); 
set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, w, h, 0, 0); 

那麼你的應用程序需要中心/縮放圖。這並不是那麼困難,只需將所有內容都繪製到一箇中間緩衝區,即本地遊戲的寬度/高度,然後將其擴展到適當的屏幕大小。所有這一切說,你應該真的在學習Allegro 5,因爲它可以在當今的硬件和操作系統(包括iOS和Android)上工作。

+0

我有一種感覺,這可能是Windows 7和舊版本的快板之間的兼容性問題,這就是爲什麼我在原始文章中提到這一點。按照您的建議,我使用set_color_depth做了測試,結果有點奇怪。我使用makecol(255,0,0)以及(0,255,0)和(0,0,255)來測試普通的紅色綠色和藍色,同時嘗試早些時候解決這個問題,這些顏色似乎很好地顯示顏色深度爲32,但所有預製的顏色(即顏色0-15)都變成純黑色,直到我幾乎看不到它們。不知道該怎麼做。 – Alex

+1

@Alex,不知道你的意思是「預製」的顏色。在15/16/24/32位模式下,您必須使用'makecol()'獲取當前視頻卡的正確常量。這必須在設置圖形模式後完成。常量不能被硬編碼或預設,因爲它取決於驅動程序以及它如何編碼像素顏色。 (除了使用GFX_GDI窗口驅動程序,已知8位模式不能很好地工作。) – Matthew

+0

好的,這很有道理。當我說預先製作的顏色時,我的意思是可以使用常量的顏色,當您使用幾乎所有具有「int color」參數的函數時,0代表黑色,15代表白色,各種顏色指定爲1-14。不過,8位色彩似乎會導致這個問題。當我將一個窗口化的程序分配給32位時,它看起來完全一樣,不管它是窗口還是全屏,所以這解決了我的問題。我從現在開始必須使用makecol。 – Alex