7.2 子弹的成员函数和成员属性
在.h中添加代码
- #ifndef BULLET_H
- #define BULLET_H
- #include "config.h"
- #include
- 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
7.3 子弹类成员函数实现
在.h中追加子弹配置信息
- /**********子弹配置数据 **********/
- #define BULLET_PATH ":/res/bullet_11.png"//子弹图片路径
- #define BULLET_SPEED 5//子弹移动速度
在.cpp中实现成员函数,代码如下:
- #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;
- }
- }
7.4 测试子弹
子弹本身应该由飞机发射,测试阶段我们写一段辅助代码,看看效果即可
测试过后,这些代码可以删除掉
在.h中添加测试代码
- //测试子弹代码
- Bullet temp_bullet;
在.cpp中的里添加测试代码
- //测试子弹代码
- temp_bullet.m_Free = false;
- temp_bullet.updatePosition();
在.cpp中的里添加测试代码
- //测试子弹代码
- painter.drawPixmap(temp_bullet.m_X,temp_bullet.m_Y,temp_bullet.m_Bullet);
运行程序,此时会有一发子弹从屏幕中射出
文章插图
测试完毕后,测试代码删除或注释即可
8 玩家发射子弹
玩家发射子弹制作步骤如下:
8.1 飞机添加新成员属性
在.h中添加新的配置数据
- #define BULLET_NUM 30//弹匣中子弹总数
- #define BULLET_INTERVAL 20 //发射子弹时间间隔
在.h中新增成员属性如下:
- //弹匣
- Bullet m_bullets[BULLET_NUM];
- //发射间隔记录
- int m_recorder;
- 山本五十六之死:中国人破译密电美国军机截杀
- 成吉思汗陵墓五大谜团大宝藏究竟在哪儿
- Windows远程桌面实现之五(FFMPEG实现桌面屏幕RTSP
- 一加五,一加5怎么oo
- 五阿哥永琪死得太早如果继位能斗过和珅吗
- 解密帝王为何被称之为九五之尊
- 盘点:曹军战亡五大虎将排名
- psp罪恶都市秘籍召唤飞机 psp罪恶都市秘籍
- 一五阳性可以转阴吗,乙肝一五阳性可以转阴真的吗?乙肝科
- 五代时期诗人黄损生平简介黄损代表作品