allegro使用經驗總結(一)

在用allegro開發flappy bird。遊戲雖然小,但是用到了allegro的方方面面,可以說是“麻雀雖小五臟俱全”。

1.physfs

這是一個跨平臺的讀寫文件的庫,可以直接讀取各種壓縮文件

想要讀文件,需要將文件所在目錄添加進physfs中,之後讀取文件只需給文件名。使用函數  int PHYSFS_addToSearchPath(const char *newDir, int appendToPath);  可以添加文件夾,也可以添加壓縮文件

想要寫文件,需要設置寫目錄,使用函數   int PHYSFS_setWriteDir(const char *newDir);  參數是文件夾路徑,暫時沒有測試壓縮文件能不能做爲寫目錄。


2.allegro的聲音播放

要使用allegro的聲音組件,首先要初始化。

al_init_acodec_addon();
al_install_audio();
al_reserve_samples(n);

allegro播放聲音採用三層結構:  Voice->Mixer->Sample_Instance 

在調用al_reserve_samples() 函數後會自動創建Voice並附加一個Mixer,這個Mixer將成爲默認的Mixer。使用Sample加載音樂,然後用Sample創建實例Sample_Instance,再把該Sample_Instance 附加到Mixer上,這樣就可以播放音樂了。

al_reserve_samples() 可以不調用,你可以自己創建Voice,Mixer,調用這個只是一種默認的方案。這個函數的參數表示了可以附加在這個函數創建的MIxer上的Sample_Instance數量。


3.MyGUI的委託機制

這個委託機制確實很好用,應該善加利用。比如在flappy bird中,鳥飛過了某個座標(或者說鋼管移過了某個座標),就可以使用委託機制,通知遊戲主類,分數增加一分。等等


4.MyGUI的ControllerPosition

MyGUI提供了三種漸變效果,透明度漸變,位置大小漸變和邊緣隱藏顯現。你也可以擴展爲自己的漸變效果重載 ControllerItem類即可。

ControllerPosition有三個設置目標位置大小的函數:setCoord()、setSize()和setPosition()。setCoord()是指每幀同時改變位置和大小,setSize()是指每幀只改變大小,setPosition()每幀只改變位置。

setFunction()和setAction()作用一樣,都是設置動作,即每幀怎麼移動。區別是setFunction()的參數是字符串,而setAction()的參數是FrameAction::IDelegate*。


5.flappy bird這種卷軸移動類遊戲的小技巧

如果讓小鳥一直移動,座標會越來越大,總有一種變量溢出的感覺,當然了,一般不會飛那麼遠。我們可以換一種思維,讓小鳥僅僅上下移動,而讓鋼管向左移動,這樣小鳥的橫座標永遠是那一個值。

另一個技巧是,當鋼管移出屏幕後,不要銷燬,而是把它存起來,到需要新鋼管的時候,再重新調用它。這樣避免了頻繁的new delete。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章