夜深人静做游戏---之五

2.6 来点音乐

一般游戏为了解决枯燥的问题,通常还要加点音乐,,我们也来加点音乐,其实并不是那么难,想其他所有的编程一样,无非是调用微软的API函数就可以完成了,书归正传

我们可以使用MCI来简易地实现在程序中播放MIDIWAV等声音。使用它需要预先声明,我们需要在文件头#include <mmsystem.h>,并在工程中加入"winmm.lib"

    下面先让我们看看播放MIDI的过程。首先我们要打开设备:

MCI_OPEN_PARMS OpenParms;

OpenParms.lpstrDeviceType =

(LPCSTR) MCI_DEVTYPE_SEQUENCER; //MIDI类型文件

OpenParms.lpstrElementName = (LPCSTR) filename; //文件名

OpenParms.wDeviceID = 0; //打开的设备的标识,后面需要使用

mciSendCommand (NULL, MCI_OPEN,

MCI_WAIT | MCI_OPEN_TYPE |

MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,

(DWORD)(LPVOID) &OpenParms); //打开设备

   接着就可以播放MIDI了:

MCI_PLAY_PARMS PlayParms;

PlayParms.dwFrom = 0; //从什么时间位置播放,单位为毫秒

mciSendCommand (DeviceID, MCI_PLAY, //DeviceID需等于上面的设备标识

MCI_FROM, (DWORD)(LPVOID)&PlayParms); //播放MIDI

   停止播放:

      mciSendCommand (DeviceID, MCI_STOP, NULL, NULL);

   最后要关闭设备:

      mciSendCommand (DeviceID, MCI_CLOSE, NULL, NULL);

   打开WAV文件与打开MIDI文件的方法几乎完全相同,只是需要将MCI_DEVTYPE_SEQUENCER 改为MCI_DEVTYPE_WAVEFORM_AUDIO

还是结合我们的demo来讲比较清楚一点,在我们的demo里面,我采用了仙剑奇侠传里面的一个比较经典的那个音乐,你听了一定会知道是哪一个(希望大宇公司不要告我侵权呀,借来用用而已呀^_^).我在地图初始化的时候就加载这段音乐,所以我写了一个void map::sound()函数.

void map::sound()

{

    MCI_OPEN_PARMS OpenParms;

    OpenParms.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_SEQUENCER;

    OpenParms.lpstrElementName = (LPCSTR) "0311.mid";//要播放的音乐文件名

    OpenParms.wDeviceID = 0;

    mciSendCommand (NULL, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,(DWORD)(LPVOID) &OpenParms);

    MCI_PLAY_PARMS PlayParms;

    PlayParms.dwFrom = 0;

    mciSendCommand (OpenParms.wDeviceID, MCI_PLAY,MCI_FROM, (DWORD)(LPVOID)&PlayParms);

}

其他的函数和语句前面介绍过了,不再累赘了.完成这些以后你就能在我的demo里面听到仙剑奇侠传》的背景音乐了.

2.7 冒险去了

结合以上讲述的方法,再写一个好点的剧本,那么就可以冒险去了,于是我就有了现在的《理工冒险记》,虽然还有很多问题.但是勉强也算是一个单线情节的RPG,至于个中滋味,就要各位玩家自己亲身去体会了.这一节纯粹是游戏的宣传,没有一点技术含量,希望大家不要拿砖头砸我呀.

2.8 编后语

到这里,我想讲述的游戏编程的东东就基本上完了,但是必须要提醒大家的是,这只是沧海一粟,它本身是一个博大精深的东西,里面包含了无数前辈的智慧的结晶.随便找一本游戏编程的书来看看,你就知道,书中还提到:人工智能,游戏中的物理动作设计,动画制作, DirectSound,DirectInput,DirectPlay……,就是在图形显示部分都还有包含粒子应用,碰撞检测,地图卷轴技术……,举不胜举,这里特别有关于人工智能的一点要拿出来说一下:记得曾经一个老游戏程序员告诉我一句话,现在我转告给你们:"一个AI代表一个程序员的水平,程序员越聪明,就越能写出高明的计算机AI.,没有其他的意思,我比较喜欢这句话,所以就说给你们听.说了这么半天废话,我想要说的还是那句话,游戏编程是一个博大精深的领域,如果本文的阅读者有志于在这方面有所发展的话,强烈建议你买一本好书(怎么这个人没说几句话就又要买书啊,莫非真的是托?),花点时间好好看一看,动手写写code,那样的话,无论是你的编程水平,还是你做游戏的水平都会有一个质的提高.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值