8.2 成员函数补充
文章插图
在构造函数中初始化发生间隔记录
- //初始化发射间隔记录
- m_recorder = 0;
之前在英雄飞机类中预留的一个shoot函数我们进行实现,代码如下:
- void HeroPlane::shoot()
- {
- //累加时间间隔记录变量
- m_recorder++;
- //判断如果记录数字 未达到发射间隔,直接return
- if(m_recorder < BULLET_INTERVAL)
- {
- return;
- }
- //到达发射时间处理
- //重置发射时间间隔记录
- m_recorder = 0;
- //发射子弹
- for(int i = 0 ; i < BULLET_NUM;i++)
- {
- //如果是空闲的子弹进行发射
- if(m_bullets[i].m_Free)
- {
- //将改子弹空闲状态改为假
- m_bullets[i].m_Free = false;
- //设置发射的子弹坐标
- m_bullets[i].m_X = m_X + m_Rect.width()*0.5 - 10;
- m_bullets[i].m_Y = m_Y - 25 ;
- break;
- }
- }
- }
8.3 主场景中实现发射子弹
在.cpp的成员函数中追加如下代码
- //发射子弹
- m_hero.shoot();
- //计算子弹坐标
- for(int i = 0 ;i < BULLET_NUM;i++)
- {
- //如果子弹状态为非空闲,计算发射位置
- if(!m_hero.m_bullets[i].m_Free)
- {
- m_hero.m_bullets[i].updatePosition();
- }
- }
在.cpp的成员函数中追加如下代码:
- //绘制子弹
- for(int i = 0 ;i < BULLET_NUM;i++)
- {
- //如果子弹状态为非空闲,计算发射位置
- if(!m_hero.m_bullets[i].m_Free)
- {
- painter.drawPixmap(m_hero.m_bullets[i].m_X,m_hero.m_bullets[i].m_Y,m_hero.m_bullets[i].m_Bullet);
- }
- }
测试运行,玩家可以发射子弹
文章插图
9 敌机制作
敌机制作与子弹制作原理类似,也是每隔一定的时间让敌机出场
制作步骤如下:
9.1 创建敌机文件和类
创建类以及生成对应的文件
创建好后生成.h 和 .cpp两个文件
文章插图
9.2 敌机成员函数和成员属性
在.h中添加如下代码:
- #ifndef ENEMYPLANE_H
- #define ENEMYPLANE_H
- #include
- class EnemyPlane
- {
- public:
- EnemyPlane();
- //更新坐标
- void updatePosition();
- public:
- //敌机资源对象
- QPixmap m_enemy;
- //位置
- int m_X;
- int m_Y;
- //敌机的矩形边框(碰撞检测)
- QRect m_Rect;
- //状态
- bool m_Free;
- //速度
- int m_Speed;
- };
- #endif // ENEMYPLANE_H
9.3 敌机成员函数实现
在.h中追加敌机配置信息
- /**********敌机配置数据 **********/
- #define ENEMY_PATH":/res/img-plane_5.png"//敌机资源图片
- #define ENEMY_SPEED 5//敌机移动速度
- #define ENEMY_NUM20//敌机总数量
- #define ENEMY_INTERVAL30//敌机出场时间间隔
- 山本五十六之死:中国人破译密电美国军机截杀
- 成吉思汗陵墓五大谜团大宝藏究竟在哪儿
- Windows远程桌面实现之五(FFMPEG实现桌面屏幕RTSP
- 一加五,一加5怎么oo
- 五阿哥永琪死得太早如果继位能斗过和珅吗
- 解密帝王为何被称之为九五之尊
- 盘点:曹军战亡五大虎将排名
- psp罪恶都市秘籍召唤飞机 psp罪恶都市秘籍
- 一五阳性可以转阴吗,乙肝一五阳性可以转阴真的吗?乙肝科
- 五代时期诗人黄损生平简介黄损代表作品