<二>Qt斗地主游戏开发:过场动画的实现

2023-10-06 22:30

本文主要是介绍<二>Qt斗地主游戏开发:过场动画的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 过场动画效果

在这里插入图片描述

2. 思路分析

  过场动画较为简单,只有一个进度条在进行滚动,因此实现起来不需要动画相关处理,仅需要图片和定时器设定,让进度条动起来即可。我们可以创建一个对话框,设定背景图片以及对话框透明无边框,然后想办法让进度条动起来。所需素材图片如下:
在这里插入图片描述
  我们只需要按照定时器设定,定时截取第二张图片中的一部分,用来覆盖刷新第一张图片中进度条框的进度即可。

3. 代码分析

3.1 创建对话框

  基于QWidget类新建QCutScene过场动画类。

//加载过场动画
class QCutScene : public QWidget
{Q_OBJECTpublic:explicit QCutScene(QWidget* parent = nullptr);~QCutScene();signals:protected:void paintEvent(QPaintEvent* event);private:QPixmap m_background;QPixmap m_progress;int m_nStep = 15;
};
3.2 设定对话框属性

  去除窗体边框–设置窗体背景透明–设置背景图片。

// 设置背景图片
m_background.load(":/images/cutscene.png");// 设定窗体大小与图片相等
setFixedSize(m_background.size());// 去除窗体边框
setWindowFlags(Qt::FramelessWindowHint | windowFlags());// 设置窗体背景透明
setAttribute(Qt::WA_TranslucentBackground);
3.3 进度条滚动

  首先我们新建一个定时器,用来定时更新重绘背景图片,其中update()更新函数会自动调用paintEvent()函数。此外我们需要保证progress.png图片的高度宽度与背景图片中进度条框的高度宽度相等,这样使用QPixmap 的copy()函数可以定时拷贝进度条图片的一部分进行图片叠加覆盖,实现动态滚动的效果。

    QPixmap pixmap(":/images/progress.png");QTimer* pTimer = new QTimer(this);connect(pTimer, &QTimer::timeout, this, [=]() {m_progress = pixmap.copy(0, 0, m_nStep, pixmap.height());update();if (m_nStep >= pixmap.width()){pTimer->stop();pTimer->deleteLater();MainGamePanel* pGamePanel = new MainGamePanel;pGamePanel->show();close();}m_nStep += 5;});pTimer->start(15);
void QCutScene::paintEvent(QPaintEvent* event)
{Q_UNUSED(event)QPainter painter(this);painter.drawPixmap(rect(), m_background);// (62,417)是背景图片中进度条的左上角坐标painter.drawPixmap(62, 417, m_progress.width(), m_progress.height(), m_progress);
}

这篇关于<二>Qt斗地主游戏开发:过场动画的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/154293

相关文章

Python实现Word转PDF全攻略(从入门到实战)

《Python实现Word转PDF全攻略(从入门到实战)》在数字化办公场景中,Word文档的跨平台兼容性始终是个难题,而PDF格式凭借所见即所得的特性,已成为文档分发和归档的标准格式,下面小编就来和大... 目录一、为什么需要python处理Word转PDF?二、主流转换方案对比三、五套实战方案详解方案1:

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl