五.飞机大战( 四 )


创建好后生成.h 和 .cpp两个文件

五.飞机大战

文章插图
6.2 飞机的成员函数和成员属性
在.h中添加代码
  1. class HeroPlane
  2. {
  3. public:
  4. HeroPlane();
  5. //发射子弹
  6. void shoot();
  7. //设置飞机位置
  8. void setPosition(int x, int y);
  9. public:
  10. //飞机资源 对象
  11. QPixmap m_Plane;
  12. //飞机坐标
  13. int m_X;
  14. int m_Y;
  15. //飞机的矩形边框
  16. QRect m_Rect;
  17. };

6.3 成员函数实现
这里飞机有个发射子弹的成员函数,由于我们还没有做子弹
因此这个成员函数先写成空实现即可
在.h中追加飞机配置参数
  1. /**********飞机配置数据 **********/
  2. #define HERO_PATH ":/res/hero2.png"

.cpp中实现成员函数代码:
  1. #include "heroplane.h"
  2. #include "config.h"
  3. HeroPlane::HeroPlane()
  4. {
  5. //初始化加载飞机图片资源
  6. m_Plane.load(HERO_PATH);
  7. //初始化坐标
  8. m_X = GAME_WIDTH * 0.5 - m_Plane.width()*0.5;
  9. m_Y = GAME_HEIGHT - m_Plane.height();
  10. //初始化矩形框
  11. m_Rect.setWidth(m_Plane.width());
  12. m_Rect.setHeight(m_Plane.height());
  13. m_Rect.moveTo(m_X,m_Y);
  14. }
  15. void HeroPlane::setPosition(int x, int y)
  16. {
  17. m_X = x;
  18. m_Y = y;
  19. m_Rect.moveTo(m_X,m_Y);
  20. }
  21. void HeroPlane::shoot()
  22. {
  23. }

6.4 创建飞机对象并显示
在.h中追加新的成员属性
  1. //飞机对象
  2. HeroPlane m_hero;

在.cpp的中追加代码
  1. //绘制英雄
  2. painter.drawPixmap(m_hero.m_X,m_hero.m_Y,m_hero.m_Plane);

测试飞机显示到屏幕中
五.飞机大战

文章插图
6.5 拖拽飞机
在.h中添加鼠标移动事件
  1. //鼠标移动事件
  2. void mouseMoveEvent(QMouseEvent *event);

重写鼠标移动事件
  1. void MainScene::mouseMoveEvent(QMouseEvent *event)
  2. {
  3. int x = event->x() - m_hero.m_Rect.width()*0.5; //鼠标位置 - 飞机矩形的一半
  4. int y = event->y() - m_hero.m_Rect.height()*0.5;
  5. //边界检测
  6. if(x <= 0 )
  7. {
  8. x = 0;
  9. }
  10. if(x >= GAME_WIDTH - m_hero.m_Rect.width())
  11. {
  12. x = GAME_WIDTH - m_hero.m_Rect.width();
  13. }
  14. if(y <= 0)
  15. {
  16. y = 0;
  17. }
  18. if(y >= GAME_HEIGHT - m_hero.m_Rect.height())
  19. {
  20. y = GAME_HEIGHT - m_hero.m_Rect.height();
  21. }
  22. m_hero.setPosition(x,y);
  23. }

测试飞机可以拖拽
五.飞机大战

文章插图
7 子弹制作
制作步骤如下:
7.1 创建子弹文件和类
创建类以及生成对应的文件
创建好后生成.h 和 .cpp两个文件
五.飞机大战

文章插图