五.飞机大战( 三 )


在map.h中添加如下代码

  1. #ifndef MAP_H
  2. #define MAP_H
  3. #include
  4. class Map
  5. {
  6. public:
  7. //构造函数
  8. Map();
  9. //地图滚动坐标计算
  10. void mapPosition();
  11. public:
  12. //地图图片对象
  13. QPixmap m_map1;
  14. QPixmap m_map2;
  15. //地图Y轴坐标
  16. int m_map1_posY;
  17. int m_map2_posY;
  18. //地图滚动幅度
  19. int m_scroll_speed;
  20. };
  21. #endif // MAP_H

5.3 实现成员函数
? 在.h中添加新的配置数据
  1. /**********地图配置数据 **********/
  2. #define MAP_PATH":/res/img_bg_level_1.jpg" //地图图片路径
  3. #define MAP_SCROLL_SPEED 2//地图滚动速度

在map.cpp中实现成员函数
  1. #include "map.h"
  2. #include "config.h"
  3. Map::Map()
  4. {
  5. //初始化加载地图对象
  6. m_map1.load(MAP_PATH);
  7. m_map2.load(MAP_PATH);
  8. //设置地图其实y轴坐标
  9. m_map1_posY = -GAME_HEIGHT;
  10. m_map2_posY = 0;
  11. //设置地图滚动速度
  12. m_scroll_speed = MAP_SCROLL_SPEED;
  13. }
  14. void Map::mapPosition()
  15. {
  16. //处理第一张图片滚动
  17. m_map1_posY += MAP_SCROLL_SPEED;
  18. if(m_map1_posY >= 0)
  19. {
  20. m_map1_posY =-GAME_HEIGHT;
  21. }
  22. //处理第二张图片滚动
  23. m_map2_posY += MAP_SCROLL_SPEED;
  24. if(m_map2_posY >= GAME_HEIGHT )
  25. {
  26. m_map2_posY =0;
  27. }
  28. }

5.4 定时器添加
在.h中添加新的定时器对象
QTimer m_Timer;
在 .h中添加 屏幕刷新间隔
#define GAME_RATE10//刷新间隔,帧率 单位毫秒
在.cpp的中追加代码
  1. //定时器设置
  2. m_Timer.setInterval(GAME_RATE);

5.5 启动定时器实现地图滚动
在.h中添加新的成员函数以及成员对象
  1. //启动游戏用于启动定时器对象
  2. void playGame();
  3. //更新坐标
  4. void updatePosition();
  5. //绘图事件
  6. void paintEvent(QPaintEvent *event);
  7. //地图对象
  8. Map m_map;

在.cpp中实现成员函数
  1. void MainScene::playGame()
  2. {
  3. //启动定时器
  4. m_Timer.start();
  5. //监听定时器
  6. connect(&m_Timer,&QTimer::timeout,[=](){
  7. //更新游戏中元素的坐标
  8. updatePosition();
  9. //重新绘制图片
  10. update();
  11. });
  12. }
  13. void MainScene::updatePosition()
  14. {
  15. //更新地图坐标
  16. m_map.mapPosition();
  17. }
  18. void MainScene::paintEvent(QPaintEvent *event)
  19. {
  20. QPainter painter(this);
  21. //绘制地图
  22. painter.drawPixmap(0,m_map.m_map1_posY , m_map.m_map1);
  23. painter.drawPixmap(0,m_map.m_map2_posY , m_map.m_map2);
  24. }

测试运行游戏,实现地图滚动
6 英雄飞机
步骤如下:
6.1 创建英雄文件和类
创建类以及生成对应的文件
和创建地图的步骤一样,这里就不在详细截图了