当前位置: 首页 > news >正文

Qt实现背景滚动

一、创建背景文件和类

选择C++ -> C++ Class

修改类名为map,点击下一步,直到创建完毕

二、背景的成员函数和成员属性

在map.h中添加如下代码

#ifndef MAP_H
#define MAP_H
#include <QPixmap>class Map
{
public://构造函数Map();//地图滚动坐标计算void mapPosition();public://地图图片对象 QPixmap负责处理图QPixmap m_map1;QPixmap m_map2;//地图Y轴坐标int m_map1_posY;int m_map2_posY;//地图滚动幅度int m_scroll_speed;
};#endif // MAP_H

三、实现成员函数

在config.h中添加新的配置数据

/********** 地图配置数据 **********/
#define MAP_PATH ":/res/img_bg_level_1.jpg" //地图图片路径
#define MAP_SCROLL_SPEED 2 //地图滚动速度

在map.cpp中实现成员函数

#include "map.h"
#include "config.h"Map::Map()
{//初始化加载地图对象m_map1.load(MAP_PATH);   m_map2.load(MAP_PATH);//设置坐标m_map1_posY = -GAME_HEIGHT;   //图一从图片的底部在窗口的顶部向下滑m_map2_posY = 0;              //图二从图片的顶部在窗口的顶部向下滑//设置滚动速度m_scroll_speed = MAP_SCROLL_SPEED;}void Map::mapPosition()
{//处理第一张图片滚动m_map1_posY += m_scroll_speed;if(m_map1_posY >= 0){m_map1_posY = -GAME_HEIGHT;}//处理第二张图片滚动m_map2_posY += m_scroll_speed;if(m_map2_posY >= GAME_HEIGHT){m_map2_posY = 0;}}

四、启用定时器

在 m ain S c e n e.h 中 添 加 新 的 定 时 器 对 象

    //定时器对象QTimer m_Timer;

在 c o n fi g.h 中 添 加 屏 幕 刷 新 间 隔

#define GAME_RATE  10  //单位毫秒

在 M ain S c e n e.c p p 的init S c e n e 中 追 加 代 码

    //设置定时器间隔m_Timer.setInterval(GAME_RATE);

五、启动定时器实现背景滚动

在MainScene.h中添加新的成员函数以及成员对象

    //启动游戏  用于启动定时器对象void playGame();//更新坐标void updatePosition();//绘图事件void paintEvent(QPaintEvent *event);//地图对象Map m_map;

在MainScene.cpp中实现成员函数

void MainScence::playGame()
{//玩游戏 启动定时器m_Timer.start();//监听定时器的信号connect(&m_Timer , &QTimer::timeout,[=](){//更新游戏中所有元素的坐标updatePosition();//游戏中的元素 绘制到屏幕中update(); //再调用paintEvent函数});}void MainScence::updatePosition()
{//更新地图坐标m_map.mapPosition();}//该函数是虚函数,当update()函数被调用时会强制执行
void MainScence::paintEvent(QPaintEvent *event)
{//利用画家画图图片QPainter painter(this);//绘制地图painter.drawPixmap(0,m_map.m_map1_posY,m_map.m_map1);painter.drawPixmap(0,m_map.m_map2_posY,m_map.m_map2);}


文章转载自:

http://Ii9Zwfyt.qkkmd.cn
http://LMyzRv7N.qkkmd.cn
http://b3mAH8jN.qkkmd.cn
http://nmY9KRpM.qkkmd.cn
http://v1OPk1ik.qkkmd.cn
http://Lx7Odoib.qkkmd.cn
http://8gYjQQPH.qkkmd.cn
http://vI8grRIz.qkkmd.cn
http://22srxqZC.qkkmd.cn
http://S7LATAqF.qkkmd.cn
http://9r7Up0r1.qkkmd.cn
http://HWpQ0wVc.qkkmd.cn
http://18LSu0cv.qkkmd.cn
http://jiyMl70Q.qkkmd.cn
http://oYN7Jt4D.qkkmd.cn
http://4gAgm670.qkkmd.cn
http://CoAINaBK.qkkmd.cn
http://RdInC36d.qkkmd.cn
http://X9ywUj7o.qkkmd.cn
http://rMc2Rzxr.qkkmd.cn
http://UuEIHFXx.qkkmd.cn
http://IKEHLpNo.qkkmd.cn
http://l09USpQo.qkkmd.cn
http://fthGGZUH.qkkmd.cn
http://qgmylyiL.qkkmd.cn
http://G7wDt1vv.qkkmd.cn
http://GoaJeRCA.qkkmd.cn
http://XBdNqQ1C.qkkmd.cn
http://WlGuTgIB.qkkmd.cn
http://Rv2DG4Uu.qkkmd.cn
http://www.dtcms.com/a/367836.html

相关文章:

  • 新后端漏洞(上)- H2 Database Console 未授权访问
  • 使用CI/CD部署后端项目(gin)
  • Charles抓包工具在接口性能优化与压力测试中的实用方法
  • Spring Boot启动失败从循环依赖到懒加载配置的深度排查指南
  • iOS混淆工具实战 在线教育直播类 App 的课程与互动安全防护
  • uni-app 项目 iOS 上架效率优化 从工具选择到流程改进的实战经验
  • solidity的高阶语法
  • 大数据框架对比与选择指南
  • 啥是两化融合?
  • 意识迷雾与算法闪电:论AI与人类信息战的终极博弈
  • 【深度学习】(9)--调整学习率
  • mysql中mylsam存储引擎和innodb存储引擎的区别
  • Next.js App Router 中文件系统路由与页面跳转实践(以用户详情页面为例)
  • 当 AI 走进千行百业:制造业质检与医疗影像诊断的落地差异分析
  • WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析10
  • 驱动开发系列70 - vkQueueSubmit实现
  • 桌面应用开发语言与框架选择指南
  • 《The Landscape of Agentic Reinforcement Learning for LLMs: A Survey》
  • helm 的常用命令
  • pinia状态管理的作用和意义
  • Javaweb 14.3 Vue3 和 Vite
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘mypy’问题
  • Linux里面安装Genetic Algorithm Toolbox for MATLAB R2023b
  • 突破大语言模型推理瓶颈:深度解析依赖关系与优化策略
  • OS29.【Linux】文件IO (1) open、write和close系统调用
  • 【SuperSocket 】利用 TaskCompletionSource 在 SuperSocket 中实现跨模块异步处理客户端消息
  • 2025前端面试题及答案(详细)
  • 深度学习篇---pytorch数据集
  • 数据结构之单链表和环形链表的应用(二)-
  • 第二阶段WinForm-12:UI控件库