消灭星星游戏程序设计【连载三】——游戏音乐的播放

消灭星星游戏程序设计【连载三】——游戏音乐的播放

大家每次都可以在页面中下载本节内容的实现代码,一步一步从简单开始,逐步完成游戏的各种功能。

游戏整体效果展示:

在这里插入图片描述

1、游戏中音效的使用

前面我们实现了图片的显示功能,是不是感觉到非常的简单。那么今天我们就继续说下游戏声音的实现。音效也是游戏的灵魂,只有搭配了美妙动听的音效以后,游戏才能令人耳目一新,与玩家产生良好的效果。

音效文件最常用的可分为两种,分别为.wav和.mp3后缀的文件,我们主要使用就是这两种音效文件。这里先简单的介绍下.wav文件的播放使用。

在这里插入图片描述

2、简单音效的播放

播放.wav音效文件最简单的播放声音方法就是直接调用VC++中提供的声音播放sndPlaySound函数,使用它就可以很方便的将文件中的声音播放出来,该函数具体使用方法如下:

sndPlaySound("sound/round_start.wav",SND_ASYNC);

那声音的播放,是不是也要跟文字和图像一样放在特定的位置呢?答案是不需要。你可以将声音的播放放在游戏过程中嗯任何时候。比如说,游戏开始运行时,玩家鼠标左键点击时,游戏通关时,按键被鼠标左键按下时等等。

3、音效在程序中的效果

那我们现在看一看,声音的播放都需要放在代码中的哪些地,我们可以在消息处理函数中添加以下一系列播放声音的动作。

游戏开始运行时:

case WM_CREATE:

		sndPlaySound("sound/welcome.wav",SND_ASYNC);

		return 0;

按下鼠标左键时:

	case WM_LBUTTONDOWN:

		sndPlaySound("sound/round_start.wav",SND_ASYNC);

		return 0;

松开鼠标右键时:

	case WM_RBUTTONUP:

		sndPlaySound("sound/game_over.wav",SND_ASYNC);

		return 0;

添加完以上代码并运行程序后,朋友们就可以直接感受到了音效的效果。效果如下:游戏在刚刚开始运行时就会播放出一个开场欢迎音乐(welcome.wav);当鼠标左键被按下时,会产生一个被游戏开始的音效效果(sound/round_start.wav);鼠标右键被松开时,会产生一个游戏结束的音效(game_over.wav)。这些音效立刻与玩家产生了良好的互动效果。

4、简单音效播放存在的问题

我们在使用上面介绍的操作音效方法过程中,发现虽然简单实现了我们对声音的需求,但使用效果并不够理想,主要存在两个问题:

第一个问题,上面介绍的音效操作只能播放.wav后缀的声音文件,无法播放.mp3后缀的声音文件。当使用sndPlaySound函数播放一个.mp3后缀的声音文件时,系统无法正常播放。

在这里插入图片描述

第二个问题,在连续播放2个以上的声音文件时,只能听到最后播放的声音文件,无法实现声音的叠加,这与游戏的特性需求不符。具体表现在,我们添加完上面的音效后,点击鼠标左键和鼠标右键后都会产生音效,但后面播放的声音会打断前面刚刚播放的音效。也就是说最后播放的声音会打断并停止此前播放的声音,可以简单的理解为单音道,始终只能播放一种声音音效。

在这里插入图片描述

5、高级的声音播放

发现了上面的问题后,我们寻求了更高级的声音播放方法。我们这里使用mciSendString这个函数,该函数可以完美的解决上面两个问题,既能播放.wav文件也能播放.mp3文件,同时可以实现多个声音同时播放的效果。该函数的使用也需要两步进行:

第一步:声音文件的加载

首先我们依然需要在程序消息函数处理WM_CREATE消息时加上以下语句,告诉系统需要加载音效文件的位置,同时给这个音效起个别名,字符串中alias后面就是别名,这里我们临时取名为round_start,以便后期使用。加载音效同样只用加载一次,后期使用无需多次加载。

		//设置并加载声音资源,声音资源只用加载一次

		mciSendString("open sound/round_start.wav alias round_start",NULL,0,NULL);

第二步:声音的播放

声音的播放依然非常的简单,直接使用的mciSendString函数,但需要注意的是,播放字符串中使用的音效资源别名round_start为刚刚第一步加载声音文件时我们自定义的别名。

		//播放声音文件

		mciSendString("play round_start from 0",NULL,0,NULL);

通过以上声音播放方式的改变,我们发现当点击鼠标左键和鼠标右键后,既能播放.wav文件也能播放.mp3文件,同时可以实现多个声音同时播放的叠加效果。

6、小结

本节中,我们已经掌握了声音显示的方法,比较完美解决了日常编程中声音的播放需求,当然使用mciSendString还可以实现更多的功能需求,例如设置、获取声音的音量大小,是否循环播放声音,获取声音是暂停还是播放状态,获取声音的播放时长等等,我们后期还会用到这些功能。

  • 26
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhooyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值