我正在訓練使用allegro庫與C++,但我得到一個問題,同時使用大圖像parrallax背景我得到一個不斷的負載/故障滾動屏幕下,使我所有的圖像閃爍有一點,有沒有辦法加載背景沒有這樣的問題?當我嘗試打印屏幕時,閃爍不出現。C++ Allegro視覺故障
感謝
我正在訓練使用allegro庫與C++,但我得到一個問題,同時使用大圖像parrallax背景我得到一個不斷的負載/故障滾動屏幕下,使我所有的圖像閃爍有一點,有沒有辦法加載背景沒有這樣的問題?當我嘗試打印屏幕時,閃爍不出現。C++ Allegro視覺故障
感謝
的閃爍是最有可能你重繪場景,並通過監視器中途刷新的結果。
治療方法是使用雙緩衝。閱讀:
http://wiki.allegro.cc/index.php?title=Double_buffering
還有一個神器叫做「撕裂」,它是由一個刷新週期期間阻擊器的緩衝區引起的。這通常是通過等待垂直同步(回溯)然後繪製來解決的,但是現在有點過時了,我們大多數人都使用OpenGL或DirectX等庫來與我們的圖形硬件進行通信。儘管如此,Allegro提供了一個等待垂直回溯開始的功能,這是您可以安全地擦除緩衝區而不用擔心撕裂的時間。在這裏看到:
我不能保證,這是解決方案,但在看你的代碼,我不明白爲什麼要創建多個緩衝區。
bufDisplay = al_create_bitmap(WIDTH, HEIGHT);
buffer = al_create_bitmap(WIDTH, HEIGHT);
除非你正在做某種需要緩衝區的特殊效果,否則它們是不必要的。 Allegro 5已經提供了一個默認設置的雙緩衝區。
只需將所有內容都繪製到默認目標位圖(顯示器的後臺緩衝區),然後al_flip_display()
。
如果要將輸出集中或縮放到不同大小的窗口,通常可以使用轉換。我不知道你爲什麼打電話Sleep(8)
。
如果使用Windows,可以切換到使用OpenGL(設置ALLEGRO_OPENGL
顯示標誌)。
你應該嘗試其他Allegro遊戲和演示(大量來源),看看它們是否都有問題。
Allegro 5的默認設置不應導致任何撕裂問題。你可以發佈一些鏈接到一些代碼和圖片來說明你的問題嗎? – Matthew
第一個鏈接有與繪圖相關的代碼的主要部分:http://pastebin.ca/2409101第二個鏈接是http://pastebin.ca/2409099的原型的整個代碼。我接受的任何屏幕圖像都沒有顯示出問題,但是,它出現在我測試它的任何平臺上 – Ted
只是快速一瞥。您對'al_set_new_display_option()'的調用不會執行任何操作,因爲您已經創建了顯示。它們隻影響未來的'al_create_display()'調用。所以如果你想看看這些設置是否有幫助,你需要在創建顯示之前調用它們。 – Matthew