在.cpp中实现成员函数,代码如下:
- EnemyPlane::EnemyPlane()
- {
- //敌机资源加载
- m_enemy.load(ENEMY_PATH);
- //敌机位置
- m_X = 0;
- m_Y = 0;
- //敌机状态
- m_Free = true;
- //敌机速度
- m_Speed = ENEMY_SPEED;
- //敌机矩形
- m_Rect.setWidth(m_enemy.width());
- m_Rect.setHeight(m_enemy.height());
- m_Rect.moveTo(m_X,m_Y);
- }
- void EnemyPlane::updatePosition()
- {
- //空闲状态,不计算坐标
- if(m_Free)
- {
- return;
- }
- m_Y += m_Speed;
- m_Rect.moveTo(m_X,m_Y);
- if(m_Y >= GAME_HEIGHT + m_Rect.height())
- {
- m_Free = true;
- }
- }
9.4 敌机出场
在.h中追加敌机出场的成员函数
在.h中追加敌机数组 和 敌机出场间隔记录 的成员属性
- //敌机出场
- void enemyToScene();
- //敌机数组
- EnemyPlane m_enemys[ENEMY_NUM];
- //敌机出场间隔记录
- int m_recorder;
初始化间隔记录属性,在.cpp的成员函数中追加
m_recorder = 0;
实现成员函数
- void MainScene::enemyToScene()
- {
- m_recorder++;
- if(m_recorder < ENEMY_INTERVAL)
- {
- return;
- }
- m_recorder = 0;
- for(int i = 0 ; i< ENEMY_NUM;i++)
- {
- if(m_enemys[i].m_Free)
- {
- //敌机空闲状态改为false
- m_enemys[i].m_Free = false;
- //设置坐标
- m_enemys[i].m_X = rand() % (GAME_WIDTH - m_enemys[i].m_Rect.width());
- m_enemys[i].m_Y = -m_enemys[i].m_Rect.height();
- break;
- }
- }
- }
在成员函数的信号发送时候,槽函数中首先追加
- //敌机出场
- enemyToScene();
文章插图
更新敌机坐标,在成员函数中追加代码
- //敌机坐标计算
- for(int i = 0 ; i< ENEMY_NUM;i++)
- {
- //非空闲敌机 更新坐标
- if(m_enemys[i].m_Free == false)
- {
- m_enemys[i].updatePosition();
- }
- }
绘制敌机,在成员函数中追加绘制敌机代码
- //绘制敌机
- for(int i = 0 ; i< ENEMY_NUM;i++)
- {
- if(m_enemys[i].m_Free == false)
- {
- painter.drawPixmap(m_enemys[i].m_X,m_enemys[i].m_Y,m_enemys[i].m_enemy);
- }
- }
添加随机数种子
在.cpp中成员函数里添加随机数种子
- //随机数种子
- srand((unsigned int)time(NULL));//头文件#include
运行测试敌机出场效果
文章插图
10 碰撞检测
实现碰撞检测步骤如下:
10.1 添加并实现碰撞检测函数
在.h中添加新的成员函数
void collisionDetection();
在.cpp中实现该成员函数
- 山本五十六之死:中国人破译密电美国军机截杀
- 成吉思汗陵墓五大谜团大宝藏究竟在哪儿
- Windows远程桌面实现之五(FFMPEG实现桌面屏幕RTSP
- 一加五,一加5怎么oo
- 五阿哥永琪死得太早如果继位能斗过和珅吗
- 解密帝王为何被称之为九五之尊
- 盘点:曹军战亡五大虎将排名
- psp罪恶都市秘籍召唤飞机 psp罪恶都市秘籍
- 一五阳性可以转阴吗,乙肝一五阳性可以转阴真的吗?乙肝科
- 五代时期诗人黄损生平简介黄损代表作品