播放声音
音效模块的实现
音效会让游戏的交互性增色不少,我们先定义几个常量用于索引要播放的音效。
#define SOUND_MOVE 1
#define SOUND_PUSH 2
#define SOUND_WRONG 3
#define SOUND_WIN 4
#define SOUND_CLICK 5
音效是一种资源,音效的初始化,就是资源的载入。
我们使用g_audio_list存储预定的5种音效,这里的设计技巧是g_audio_list[0]不使用,这样播放一处声音时就不需要作减一运算了。
#define AUDIO_COUNT 6
static int g_audio_list[AUDIO_COUNT];
//=======================================================================================
int Audio_Init()
{
g_audio_list[SOUND_MOVE] = E2D_LoadAudio("./res/audio/move.mp3", E2D_SOUND);
g_audio_list[SOUND_PUSH] = E2D_LoadAudio("./res/audio/push.mp3", E2D_SOUND);
g_audio_list[SOUND_WRONG] = E2D_LoadAudio("./res/audio/wrong.wav", E2D_SOUND);
g_audio_list[SOUND_WIN] = E2D_LoadAudio("./res/audio/win.mp3", E2D_SOUND);
g_audio_list[SOUND_CLICK] = E2D_LoadAudio("./res/audio/click.ogg", E2D_SOUND);
return 1;
}
基于Easy2D播放音效非常简单,这里我们提供Audio_Play作为与其它模块的交互。
void Audio_Play(int id)
{
if (id >= SOUND_MOVE && id < AUDIO_COUNT)
{
E2D_PlayAudio(id, 0, 0);
}
}
与其它模块的交互
一切就绪后,我们只需要在玩家触发相应的动作时,播放相应的音效即可;如向前移动却碰到障碍时播放出错音效。
if (g_map[p1.r][p1.c] == WALL)
{
Audio_Play(SOUND_WRONG);
return;
}
现有的实现在通关时,会立即加载下一关地图,显示非常突兀,但加入音效时,会增加一点过渡感,让我们更加清晰的感知到过关了这一事实。
if (Is_Level_Clear())
{
Audio_Play(SOUND_WIN);
Game_Load_Level(g_cur_level + 1);
}