11 爆炸效果
爆炸效果功能实现步骤如下:
- 创建爆炸文件和类
- 添加爆炸类中的成员函数和成员属性
- 实现成员函数
- 调用并测试效果
11.1 创建爆炸文件和类
创建Bomb类以及生成对应的文件
创建好后生成bomb.h 和 bomb.cpp两个文件
11.2 爆炸成员函数和成员属性
在config.h中加入爆炸配置数据
#define BOMB_PATH ":/res/bomb-%1.png" //爆炸资源图片
#define BOMB_NUM 20 //爆炸数量
#define BOMB_MAX 7 //爆炸图片最大索引
#define BOMB_INTERVAL 20 //爆炸切图时间间隔
在bomb.h中添加如下代码:
#ifndef BOMB_H
#define BOMB_H
#include "config.h"
#include <QPixmap>
#include <QVector>
class Bomb
{
public:
Bomb();
//更新信息(播放图片下标、播放间隔)
void updateInfo();
public:
//放爆炸资源数组
QVector<QPixmap> m_pixArr;
//爆炸位置
int m_X;
int m_Y;
//爆炸状态
bool m_Free;
//爆炸切图的时间间隔
int m_Recoder;
//爆炸时加载的图片下标
int m_index;
};
#endif // BOMB_H
11.3 实现成员函数
Bomb::Bomb()
{
//初始化爆炸图片数组
for(int i = 1 ;i <= BOMB_MAX ;i++)
{
//字符串拼接,类似 ":/res/bomb-1.png"
QString str = QString(BOMB_PATH).arg(i);
m_pixArr.push_back(QPixmap(str));
}
//初始化坐标
m_X = 0;
m_Y = 0;
//初始化空闲状态
m_Free = true;
//当前播放图片下标
m_index = 0;
//爆炸间隔记录
m_Recoder = 0;
}
void Bomb::updateInfo()
{
//空闲状态
if(m_Free)
{
return;
}
m_Recoder++;
if(m_Recoder < BOMB_INTERVAL)
{
//记录爆炸间隔未到,直接return,不需要切图
return;
}
//重置记录
m_Recoder = 0;
//切换爆炸播放图片
m_index++;
//注:数组中的下标从0开始,最大是6
//如果计算的下标大于6,重置为0
if(m_index > BOMB_MAX-1)
{
m_index = 0;
m_Free = true;
}
}
11.4 加入爆炸数组
在MainScene.h中加入爆炸数组 成员属性
//爆炸数组
Bomb m_bombs[BOMB_NUM];
在碰撞检测成员函数中,当发生碰撞时,设置爆炸对象的信息
//播放爆炸效果
for(int k = 0 ; k < BOMB_NUM;k++)
{
if(m_bombs[k].m_Free)
{
//爆炸状态设置为非空闲
m_bombs[k].m_Free = false;
//更新坐标
m_bombs[k].m_X = m_enemys[i].m_X;
m_bombs[k].m_Y = m_enemys[i].m_Y;
break;
}
}
在 MainScene.cpp的updatePosition中追加代码
//计算爆炸播放的图片
for(int i = 0 ; i < BOMB_NUM;i++)
{
if(m_bombs[i].m_Free == false)
{
m_bombs[i].updateInfo();
}
}
在 MainScene.cpp的paintEvent 中追加绘制爆炸代码
//绘制爆炸图片
for(int i = 0 ; i < BOMB_NUM;i++)
{
if(m_bombs[i].m_Free == false)
{
painter.drawPixmap(m_bombs[i].m_X,m_bombs[i].m_Y,m_bombs[i].m_pixArr[m_bombs[i].m_index]);
}
}
测试,实现爆炸效果
12 音效添加
音效添加步骤如下:
- 添加多媒体模块
- 播放音效
12.1 添加多媒体模块
在工程文件planeWar.pro 中修改代码
QT += core gui multimedia
12.2 播放音效
在config.h中 添加音效的配置路径
#define SOUND_BACKGROUND ":/res/bg.wav"
#define SOUND_BOMB ":/res/bomb.wav"
注: QSound使用时候要包含头文件 #include <QSound>
在PlayGame中添加背景音乐
//启动背景音乐
QSound::play(SOUND_BACKGROUND);
在爆炸时候添加爆炸音效
//播放音效
QSound::play(SOUND_BOMB);
测试音效
13 打包发布
-
确定环境变量配置好 PATH:
C:\Qt\Qt5.x.x\5.x.x\mingw53_32\bin
-
在QT中把运行模式切换成 release 模式, 编译。 在外层目录中会有 release 版本的目录.
-
将目录中的 rcc 二进制资源文件、可执行程序文件(
.exe
) 拷贝到另外一个单独的文件夹中. -
进入 cmd 命令模式,切换到可执行程序所在的目录. 执行以下命令,将可执行程序所需的库文件拷贝到当前目录:
windeployqt PlaneWar.exe
-
额外可以将 ico 图标也拷贝到当前可执行程序所在的目录.
-
启动 HM NIS EDIT 软件,在软件中选择: 文件->新建脚本向导, 接下来跟着向导操作.
-
为了让安装包安装软件也有快捷方式图标,在生成的脚本里。进行修改:
CreateShortCut "$DESKTOP\飞机大战.lnk" "$INSTDIR\PlaneWar.exe" CreateShortCut "$DESKTOP\飞机大战.lnk" "$INSTDIR\PlaneWar.exe" "" "$INSTDIR\app.ico"
-
点击菜单栏的
NSIS
,然后选择编译,在桌面生成安装包.
至此本案例实现完毕!