文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发其他语言在Pocket PC上编写游戏之九
精品推荐
特别推荐
·控制面板知多少
·给你十条学习Ruby语言的理由
·分页管理机制
·Perl 语言的重要价值体现
·经验技巧:分享两条Delphi开发经验
·Java编程思想:面向对象的逻辑思维方法
·Samba系统简介
热点TOP10
·AIX 5L 学习大纲/简易教程(2)(未经许可,请勿COPY)
·DENX U-Boot及Linux使用手册
·EZ-USB 68013A开发指南
·图象处理中的边缘检测------canny算子
·Visual C++ ADO数据库编程入门
·利用 wordXP 实现自动排班
·UDT协议-基于UDP的可靠数据传输协议
·XPCOM--LINUX下的组件开发技术
·MyEclipse JSF 快速入门中文版(上)
·samba和openldap结合实战
·AIX 5L 学习大纲/简易教程(1)(未经许可,请勿COPY)
·Microsoft Windows XP Embedded 开发工具概述
·eMbedded Visual C++开发入门
·在VC6中创建wxWidgets项目[附图]
·数值计算程序大放送-线性代数方程组
·列表视图控件
·visual studio 2005 简体中文团队开发版 SQL server 2005简体中文版下载
·Visual Studio 2005:在 Visual C++ 中开发自定义的绘图控件
·汇编语言工具下载
·多文档界面(MDI)

在Pocket PC上编写游戏之九

日期:2007年5月3日 作者: 查看:[大字体 中字体 小字体]


  导读

  如何发出声音?我们首先需要了解Pocket PC机器的硬件体系结构。我们有双声道设备(立体声模式)用来播放WAVE音频。不过有的设备只有一个声道(单音的模式)。如果我们有双声道,那么声音电路能生产的音频范围可以从8KHz到44HKz。如果每条声道能分别地工作,我们便能产生简单的动态的声音。不幸地是技术上这是不可能的。

  我们使用API函数MessageBeep(...)可以制造出声音。它听上去与Windows的典型的系统报警声音一样。它可以被应用到一些小的简单游戏中,这是在游戏中产生声音或音响效果的最容易和最安全的方法。同时还可以减小你的游戏的文件大小。

<source listing 1, messagebeep> NYI
  在Pocket PC上使游戏发出声音的另外的一个容易的方法是使用API函数PlaySound(...)。它可以用来录制和播放音频。因此你可以使用它给你的游戏增加声音,但你需要有外部的音频文件资源。音频文件的扩展名是“WAV”。 它还可以被用来实现录制数字的音频好象录音机软件。你可以从许多地方找到合适的声音资源。在Windows目录,在Pocket PC系统中都有预装的一些声音。我们也能使用他们,象闹钟声、错误提示声等等。

<source listing 2, PlaySound> NYI
  PlaySound(...) 应用程序接口可以播放来自外部的Wave文件和内在的wave资源,系统会将他们放到内存中(运行时刻产生)。 它有一些播放模式的的选择,例如,循环播放或顺序播放。

  sndPlaySnd(...) 是一个PlaySound(...)的子集。它少了一些播放选择但是因此有获得了速度。它也可以通过外部的wave文件向游戏提供声音,并且播放的声音文件在Win.ini文件中进行了注册。

<source listing 3, sndPlaySound> NYI
  使用标准的API播放声音有一个主要的问题;当一个新声音播放时,前一个会停止。这在一般的游戏程序中可能算不上问题。可一个好的游戏,需要动态的产生声音,什么时候需要,什么时候便产生,声音出现完全取决于游戏的进行状态。我们怎样达到这种效果呢?

  使用pgsnd.dll

  我们可以使用Windows多媒体扩展系统(MMSYSTEM)来解决低级的播放音频API带来的问题。方法很简单,我们利用混频器引擎技术实现实时的数字混频。因为代码太复杂了。关于这个我不准备多将。但我们提供一个免费混频的引擎pgsnd.dll,你可以从网站下载栏目下载它。我们同时提供使用它的免费许可证。

  在使用这个库之前,你需要调用pg_WaveInit(…) 应用程序接口函数。它将接管设备的声音系统。因此你将不能使用任何标准的声音API例如sndPlaySound(…)。

  当你正在运行着一个应用时,你希望切换任务(使用另外一个应用程序),你的程序将失去焦点,但是并没有停止,仍然在运行。此时系统已经被pg_WaveInit(…)钩住,你将没有办法实现在新的应用程序使用wav。怎么办呢?我们可以这样做当你的应用失去焦点或停止活动时,Windows将自动地发送WM_ACTIVATE消息到应用程序窗口。wParam将显示你的应用程序是处在停止还是激活的状态。然后可以用pg_WaveActivate(…) 解决这个问题。

  Ex:

WM_ACTIVATE:
pg_WaveActivate((BOOL)wParam);
break;
  pgsnd.dll的作用是对插槽/声道进行分配。当游戏需要的声音时,就指定插槽数。然后将声音发出到硬件输出设备。装载声音可以到任何插槽,pg_WaveLoad(…)函数被用来处理这个任务。如果你装载新声音到任何已经存在的插槽,先前的声音将自动地被删除并且被新的代替。

  Ex:

pg_WaveLoad(g_hInst, 1000, 0); // load wave to slot 0
..
pg_WavePlay(0,FALSE); // start to play wave from slot 0
  有两个函数可以用来管理声音插槽, 他们是:

  Ex:

pg_WaveSetChannelValume(…)
pg_WaveStop(…)
  音量控制: 有三种音量控制类型; 主音量,所有的音乐音量,单独声道的音量。

  最后在退出你前应用前,你需要手工解下WAVE设备。如果你不这样做,声音将不能生产直到你已经重新启动你的机器。有些时候你的程序需要在退出之前就调用pg_WaveClose (…)函数来解下设备,这也许会产生意想不到的事情或者在你的程序中产生一个错误。你同样需要重新启动机器来再次产生声音。

  这个反初始化操作最好的位置是在退出应用程序之前。

  Ex:

while(GetMessage(....))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

pg_WaveClose();

(出处:清风网络学院


[1] 




上一篇:J2ME中用MMAPI开发手机摄像头程序

下一篇:Windows Mobile开发工具简介

在Pocket PC上编写游戏之九 相关文章:
·孤胆枪手2 - 游戏秘籍
·罪恶都市 - 游戏秘籍
·帝国时代2:征服者 - 游戏秘籍
·《侠盗猎车手-罪恶都市》修改 - 游戏秘籍
·三国群侠传 流程攻略 - 游戏攻略
·《仙剑奇侠传2》完美补充攻略 - 游戏攻略
·暗黑破坏神2:毁灭之王 符文物品、符石功能、赫拉笛克方块等 - 游戏秘籍
·《合金装备3 食蛇者》超详尽剧情 - 游戏攻略
·《鬼舞者3》中文功略(PS2) - 其他电视游戏攻略秘籍 - 其他电视游戏
·重返德军总部 全攻略 - 游戏攻略
在Pocket PC上编写游戏之九 相关软件:
·三国群英传5 宇峻科技 单机游戏
·QQ游戏大厅V2007 Beta 1
·游戏王 混沌力量
·GBA《游戏王GX学院决斗》模拟器
·超经典街机游戏13合一
·多多真人视频棋牌游戏BETA V1.52
·培训游戏
·经典爱国游戏:抗日地雷战
·穷爸爸富爸爸现金流游戏 游戏I+II 书籍 映像
·新剑侠情缘中文版 完美游戏全属性修改器

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot