简单的C++游戏载入界面设计
来源:互联网 发布:windows无法访问\\ 编辑:程序博客网 时间:2024/05/16 23:45
源代码下载地址:
网盘:http://pan.baidu.com/s/1eQ33c7w
CSDN:http://download.csdn.net/detail/u011418173/9080501
最近,看了下毛星云的书:《逐梦旅程 windows游戏编程之从零开始》,对其十分的感兴趣,这本书的内容浅显易懂,很适合像我们这些编程的入门者阅读。目前只看了该书的前半部分,也就是2D游戏的编程,自己便尝试着在浅墨大神的基础框架上做一些别的东西。
在一些大型游戏的游戏资源载入的过程中,都是会有专门的载入界面,让玩家在等待的过程中不至于太无聊和焦虑。一般,载入界面运行是要有动态效果的,这一般可以说明该游戏没有崩溃,让玩家不要慌:别急,游戏正在加载呢,等等吧。之前玩文明5时的载入界面令我印象深刻,由于自己的电脑不好,一次载入都要好几分钟,有时候游戏死了都不知道ORZ。
1、材料的准备
首先要准备一些图片资源,一些简单的资源我都是自己制作的,这里我准备了一个旋转的loading效果图片,如下所示:
当然了,想通过C++载入gif图片是有些困难的,于是我将这些图片分解为8帧,使用透明遮罩法来显示,具体的制作方法这里就不详述。下面是制成的图片,:
载入时的背景图片:
还有正式游戏时的背景图片:
2、建立loading线程
在浅墨的框架中,有三个关键的函数,分别是:
1 2 3
那么载入界面的代码当然是要写在初始化中了,为了不影响其他资源的载入,我考虑创建一个线程,在这里实现loading界面的绘制。同时主程序实现加载游戏资源的任务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30前面的g_hdc,g_mdc,g_bufdc三个设备上下文句柄,是用于实现三缓冲绘图用的,这里就不再详述了。后面是设置字体,这里选用的是“钟齐段宁行书”字体,个人比较喜欢这种风格。载入完成这些资源后,就可以进入线程函数ThreadFunc了。当所有的游戏资源全部完成之后,将bool类型的g_bFinishTread置为1,从而让线程退出。
由于这个例子的资源极少,载入极快,故几乎看不到载入时的效果,所以添加了一句:Sleep(3000)。这样我们能够看到3秒的loading界面,从而判断效果的好坏。
下面是线程函数的具体内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
为了防止在绘制loading界面的同时进行正常游戏的绘制,我在winmain函数的循环体中加入了一条判断:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
3、实现效果
最后我们看到效果图为:加载完成后为:
4、补充内容
浅墨大神在游戏中添加的音乐资源都是wav格式的,而PlaySound函数只能支持wav格式的文件,同时该格式的文件不能够进行其他的更多的操作如声音的暂停、停止、音量的控制等。所以我在程序中选择了使用mp3格式的文件,并使用MCI媒体控制接口来实现音乐的播放,今后的游戏也尽量都使用这种方法。但是这种方法的话,在编译器中调试时是发不出声音的!一开始还以为是代码的问题,后来尝试直接运行Debug文件夹下的.exe文件,发现代码原来没有问题。。。
注:需要链接winmm.lib库
- 简单的C++游戏载入界面设计
- 简单的游戏界面设计
- iOS 简单的猜颜色游戏 界面设计的比较简单 - -
- 游戏界面设计的原则
- 简单的聊天界面设计
- 简单的界面设计
- 游戏界面设计艺术性的思考
- 简单的Windows登陆界面设计
- Drect3D---多游戏模型的载入
- 游戏界面设计的10项黄金准则
- 游戏界面设计的10项黄金准则
- Unity 简单游戏编程(1) 开始界面设计
- c简单的扫雷扫雷游戏
- 简单的C语言猜数游戏
- 简单的三子棋游戏(C语言版)
- 最简单的wxPython的界面设计
- 最简单的wxPython的界面设计
- 最简单的wxPython的界面设计
- 照明
- 数据结构--二叉树遍历
- AngularJS 应用身份认证的技巧
- 使用JDK自带jvisualvm监控tomcat
- Find Peak Element —— Leetcode
- 简单的C++游戏载入界面设计
- c++のeof
- 关于动态代理的初步认识
- 详细研究CSS列表
- Java 事务管理
- 矩阵乘法求斐波那契数列(快速幂)
- MySQL学习笔记(一)--SQL语句
- 懒加载
- VC++6.0设置RTTI,以支持运行时执行dynamic_cast<>等RTTI运算符。