战机发射子弹、敌机出现、爆炸效果、音效的添加
1.制作子弹类
- 创建子弹文件和类
- 添加子弹类中的成员函数和成员属性
- 实现成员函数
- 测试子弹
1.1创建子弹文件夹和类
创建Bullet类以及生成对应的文件
创建好后生成bullet.h 和 bullet.cpp两个文件
1.2添加子弹的成员函数和成员属性
战机发射子弹,子弹发射后会向上移动,移动到地图外子弹消失。
因此子弹的属性和:子弹图片、子弹坐标、子弹移动速度、子弹是否飞出地图外、子弹的矩形边框(设定矩形边框后,后续实现击败敌机时可以通过矩形边框是否相交来判断)、子弹移动的函数
在config.h中追加子弹配置信息
/********** 子弹配置数据 **********/
#define BULLET_PATH ":/res/bullet_11.png" //子弹图片路径
#define BULLET_SPEED 5 //子弹移动速度
在Bullet.h中添加成员属性和成员函数
#ifndef BULLET_H
#define BULLET_H
#include "config.h"
#include <QPixmap>
class Bullet
{
public:
Bullet();
//更新子弹坐标
void updatePosition();
public:
//子弹资源对象
QPixmap m_Bullet;
//子弹坐标
int m_X;
int m_Y;
//子弹移动速度
int m_Speed;
//子弹是否闲置
bool m_Free;
//子弹的矩形边框(用于碰撞检测)
QRect m_Rect;
};
#endif // BULLET_H
子弹类成员函数实现
#include "bullet.h"
Bullet::Bullet()
{
//加载子弹资源
m_Bullet.load(BULLET_PATH);
//子弹坐标 初始坐标可随意设置,后期会重置
m_X = GAME_WIDTH*0.5 - m_Bullet.width()*0.5;
m_Y = GAME_HEIGHT;
//子弹状态
m_Free = true;
//子弹速度
m_Speed = BULLET_SPEED;
//子弹矩形框
m_Rect.setWidth(m_Bullet.width());
m_Rect.setHeight(m_Bullet.height());
m_Rect.moveTo(m_X,m_Y);
}
void Bullet::updatePosition()
{
//如果子弹是空闲状态,不需要坐标计算 玩家飞机可以控制子弹的空闲状态为false
if(m_Free) return;
//子弹向上移动
m_Y -= m_Speed;
m_Rect.moveTo(m_X,m_Y);
if(m_Y <= -m_Rect.height())
{
m_Free = true;
}
}
测试子弹是否能正常发出
子弹本身应该由飞机发射,测试阶段我们写一段辅助代码,看看效果即可
测试过后,这些代码可以删除掉
在MainScene.h中添加测试代码
//测试子弹代码
Bullet temp_bullet;
在MainScene.cpp中的updatePosition里添加测试代码
//测试子弹代码
temp_bullet.m_Free = false;
temp_bullet.updatePosition();
在MainScene.cpp中的paintEvent里添加测试代码文章来源:https://www.toymoban.com/news/detail-814456.html
//测试子弹代码
painter.drawPixmap(temp_bullet.m_X,temp_bullet.m_Y,temp_bullet.m_Bullet);
运行程序,此时会有一发子弹从屏幕中射出
文章来源地址https://www.toymoban.com/news/detail-814456.html
到了这里,关于QT实现飞机大战-2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!