2013-06-25 111 views
0

我正在訓練使用allegro庫與C++,但我得到一個問題,同時使用大圖像parrallax背景我得到一個不斷的負載/故障滾動屏幕下,使我所有的圖像閃爍有一點,有沒有辦法加載背景沒有這樣的問題?當我嘗試打印屏幕時,閃爍不出現。C++ Allegro視覺故障

感謝

+1

Allegro 5的默認設置不應導致任何撕裂問題。你可以發佈一些鏈接到一些代碼和圖片來說明你的問題嗎? – Matthew

+0

第一個鏈接有與繪圖相關的代碼的主要部分:http://pastebin.ca/2409101第二個鏈接是http://pastebin.ca/2409099的原型的整個代碼。我接受的任何屏幕圖像都沒有顯示出問題,但是,它出現在我測試它的任何平臺上 – Ted

+1

只是快速一瞥。您對'al_set_new_display_option()'的調用不會執行任何操作,因爲您已經創建了顯示。它們隻影響未來的'al_create_display()'調用。所以如果你想看看這些設置是否有幫助,你需要在創建顯示之前調用它們。 – Matthew

回答

1

的閃爍是最有可能你重繪場景,並通過監視器中途刷新的結果。

治療方法是使用雙緩衝。閱讀:

http://wiki.allegro.cc/index.php?title=Double_buffering

還有一個神器叫做「撕裂」,它是由一個刷新週期期間阻擊器的緩衝區引起的。這通常是通過等待垂直同步(回溯)然後繪製來解決的,但是現在有點過時了,我們大多數人都使用OpenGL或DirectX等庫來與我們的圖形硬件進行通信。儘管如此,Allegro提供了一個等待垂直回溯開始的功能,這是您可以安全地擦除緩衝區而不用擔心撕裂的時間。在這裏看到:

https://www.allegro.cc/manual/4/api/graphics-modes/vsync

+0

在allegro5中有其他方式可以使用blit或vsync嗎?我無法弄清楚如何使用此版本的庫調用它們 – Ted

+1

看來,在Allegro 5中,您不必擔心緩衝或vsync,因爲它現在使用硬件加速。看看這裏:https://www.allegro.cc/manual/5/al_flip_display - 如果你正在使用Allegro 5,你不應該看到閃爍。 – paddy

+1

除了我最近的評論,看起來你可能需要明確地創建你的顯示緩衝。請參閱https://www.allegro.cc/manual/5/al_set_new_display_option – paddy

1

我不能保證,這是解決方案,但在看你的代碼,我不明白爲什麼要創建多個緩衝區。

bufDisplay = al_create_bitmap(WIDTH, HEIGHT); 
buffer = al_create_bitmap(WIDTH, HEIGHT); 

除非你正在做某種需要緩衝區的特殊效果,否則它們是不必要的。 Allegro 5已經提供了一個默認設置的雙緩衝區。

只需將所有內容都繪製到默認目標位圖(顯示器的後臺緩衝區),然後al_flip_display()

如果要將輸出集中或縮放到不同大小的窗口,通常可以使用轉換。我不知道你爲什麼打電話Sleep(8)

如果使用Windows,可以切換到使用OpenGL(設置ALLEGRO_OPENGL顯示標誌)。

你應該嘗試其他Allegro遊戲和演示(大量來源),看看它們是否都有問題。

+0

我確實使用了多個緩衝區來在不同分辨率的情況下調整屏幕大小,以保持圖像的細節水平,但是,即使有一個緩衝區,我仍然遇到這個問題。設置openGL將通過al_set_new_display_flags(ALLEGRO_OPENGL)?我這樣做,但它只是崩潰,說顯示無法初始化。我會嘗試在allegro論壇中找到是否有其他人遇到過這種情況,謝謝 – Ted

+0

@Ted,這是正確的。如果在創建顯示時崩潰,聽起來像是非常錯誤的。如果不加入調試器,無法確定會導致什麼結果。 – Matthew