【教程09】有色有声



yl_ls
2009-03-19 21:32:25

[url=http://www.iacger.com/]http://www.iacger.com/[/url] 首发

让人心动的游戏,当然要有声音嘛
本例子使用的是 MP3 ,当然 NGE2 还有 OGG,PCM 的播放支持,因为接口一样,大家可以自己去试试

本例使用的音乐在 libnge2 的 win32buildsin 目录下,包括之前的教程都应该放在此目录中运行[code=c]#include "libnge2.h"

// 退出标识
int game_quit = 0;

// 音乐结构
music_ops mp3_play;

// 表示音乐是否暂停了
int mp3_play_pause = 0;

//初始音量为128音量范围为【0-128】
int volume = 128;

// 按下键处理
void btn_down(int keycode)
{
switch(keycode)
{
case PSP_BUTTON_UP:
break;
case PSP_BUTTON_DOWN:
break;
case PSP_BUTTON_LEFT:
break;
case PSP_BUTTON_RIGHT:
break;
case PSP_BUTTON_TRIANGLE:
break;
case PSP_BUTTON_CIRCLE:
// 按下圆键时,在播放与暂停之间转换
if(mp3_play.eos())
{
// 当音乐已经播放结束时,重新播放
mp3_play.play();
mp3_play_pause = 0;
return;
}
else if(mp3_play_pause)
{
mp3_play.resume();
}
else
{
mp3_play.pause();
}
mp3_play_pause = 1 - mp3_play_pause;
break;
case PSP_BUTTON_CROSS:
break;
case PSP_BUTTON_SQUARE:
break;
case PSP_BUTTON_SELECT:
game_quit = 1;
break;
case PSP_BUTTON_START:
game_quit = 1;
break;
}
}

// 释放键处理
void btn_up(int keycode)
{
switch(keycode)
{
case PSP_BUTTON_UP:
break;
case PSP_BUTTON_DOWN:
break;
case PSP_BUTTON_LEFT:
break;
case PSP_BUTTON_RIGHT:
break;
case PSP_BUTTON_TRIANGLE:
break;
case PSP_BUTTON_CIRCLE:
break;
case PSP_BUTTON_CROSS:
break;
case PSP_BUTTON_SQUARE:
break;
case PSP_BUTTON_SELECT:
game_quit = 1;
break;
case PSP_BUTTON_START:
game_quit = 1;
break;
}
}

// 用户绘图函数
void DrawScene()
{
// 为开始绘图准备
BeginScene(1);

// 音乐播放时显示白色背景,音乐暂停或结束时显示黑色背景
if(mp3_play_pause)
{
FillRect(0,0,480,272,MAKE_RGBA_565(0,0,0,0), DISPLAY_PIXEL_FORMAT_565);
}
else
{
FillRect(0,0,480,272,MAKE_RGBA_565(255,255,255,255), DISPLAY_PIXEL_FORMAT_565);
}

// 完成绘图并显示
EndScene();
}

extern "C"
int main(int argc, char* argv[])
{

// nge 初始化
NGE_Init(INIT_ALL);

// 初始化音乐结构
MP3PlayInit(&mp3_play);

// 设置音量
mp3_play.volume(volume);

// 加载 mp3
int res = mp3_play.load("music/simple1.mp3");

// 开始播放用play需要调用stop释放资源
mp3_play.play();

// 设置自定义按钮处理函数
InitInput(btn_down,btn_up,1);
while ( !game_quit )
{
// 显示帧数显示
ShowFps();

// 判断是否音乐已经播放完成,更新 mp3_play_pause 的状态
if(!mp3_play_pause && mp3_play.eos())
{
mp3_play_pause = 1;
}

// 要求 nge2 处理按键,它将使用 InitInput 定义的函数来处理
InputProc();
// 调用用户绘图函数
DrawScene();
}

// 释放音乐文件
mp3_play.stop();

// 释放mp3相关内容
MP3PlayFini();

// nge 退出处理
NGE_Quit();
return 0;
}[/code]效果图:
= = 就是黑白屏,你不会真想看吧~~~~