Galaxy2D游戲引擎教程6 - 音樂和音效
Posted on 2010-04-23 13:49 劍孤寒 閱讀(1130) 評論(10) 編輯 收藏 引用 所屬分類: Galaxy2D 游戲引擎教程 在一個優(yōu)秀的游戲中,音樂和音效往往能起到畫龍點睛的作用,這一節(jié)我們就來學(xué)習(xí)如何在GGE中播放音樂和音效。
GGE自帶了音頻解碼播放功能,不需要使用base或fmod等音效庫。在GGE中提供了一個Sound_Load()函數(shù)用于載入音樂和音效,支持wav和ogg格式的音頻文件,如果載入成功則返回一個ggeSound指針,例如:
m_sound = Sound_Load("Fire1.ogg"); //載入音效
m_music = Sound_Load("eyes on me.ogg", true); //載入音樂 要載入音效只需簡單的調(diào)用Sound_Load()函數(shù),并傳入音效文件名即可,如果是載入音樂的話,一般需要將音樂轉(zhuǎn)換成ogg格式,并且將Sound_Load()函數(shù)的第二個參數(shù)傳入true,表示以流方式載入。需要注意的是,以流方式載入的ogg文件比較節(jié)省內(nèi)存(wav格式無效),但無法同一時間播放多次,例如碰到同時響起兩聲槍響這種情況,如果以流方式載入,調(diào)用兩次播放函數(shù)實際上只能聽到一聲槍響,所以音效一般不使用流方式載入。
音樂和音效載入后都可以調(diào)用ggeSound::Play()函數(shù)來播放,播放時可以動態(tài)修改音量、頻率、聲道平衡,也可以暫停和恢復(fù)播放。例如在OnUpdate(float dt)函數(shù)中添加如下代碼對音樂和音效進(jìn)行控制:
switch (Input_GetKey())
{
case 'Q':
m_music->Play(true); //音樂循環(huán)播放
break;
case 'W':
m_music->Stop();
break;
case 'A':
m_music->Pause();
break;
case 'S':
m_music->Resume();
break;
case 'Z':
if (m_musicVolume > 0) m_musicVolume--;
m_music->SetVolume(m_musicVolume);
break;
case 'X':
if (m_musicVolume < 100) m_musicVolume++;
m_music->SetVolume(m_musicVolume);
break;
case 'E':
if (m_soundVolume > 0) m_soundVolume--;
m_sound->SetVolume(m_soundVolume);
break;
case 'R':
if (m_soundVolume < 100) m_soundVolume++;
m_sound->SetVolume(m_soundVolume);
break;
case 'D':
if (m_soundPan > -100) m_soundPan--;
m_sound->SetPan(m_soundPan);
break;
case 'F':
if (m_soundPan < 100) m_soundPan++;
m_sound->SetPan(m_soundPan);
break;
case 'C':
m_soundpPitch -= dt * 0.5f;
if (m_soundpPitch < 0) m_soundpPitch = 0;
m_sound->SetPitch(m_soundpPitch);
break;
case 'V':
m_soundpPitch += dt * 0.5f;
if (m_soundpPitch > 10.0f) m_soundpPitch = 10.0f;
m_sound->SetPitch(m_soundpPitch);
break;
case VK_SPACE:
m_sound->Play();
break;
} 因為音樂是以流方式載入的,每次按下Q鍵會讓音樂重新開始播放,音效不是以流方式載入的,所以每次按下空格鍵即使之前的音效沒播放完也能聽到新的聲音。
在GGE中還提供了一個ggeMusic模塊,這個是專門用來播放midi音樂的,不過這個現(xiàn)在用得比較少,就不詳細(xì)介紹了,大致使用方法跟ggeSound一樣,如果有需要可以查看文檔。



