Qt的QPropertyAnimation动画框架小用

Qt的QPropertyAnimation动画框架小用

有一天在吹逼群里,发现一个群里大佬在Steam上上架了一个游戏-秘封旅行 ~Secret Sealing Travel。

这是一个桌宠游戏。

目前采用C#编写,所以目前应该是不跨平台的。他也是C#新手,所以宠物的动画也只是一个单纯的时间戳轮训。自己自定义timer来实现动画效果。我说你可以用Qt的来实现下,大概十几行核心代码就能搞定。所以这也是我写这篇文章的一个缘由。

代码 QPropertyAnimation

由于资源文件是png,所以这个核心代码就是三张图来回循环。当然你可以使用QTimer定时器来搞定这件事儿,但是今天要用QPropertyAnimation

本质上就是循环渲染三张图。

直接上代码 首先窗口无边框,要透明

 setAttribute(Qt::WA_TranslucentBackground, true);
    setWindowFlags(Qt::FramelessWindowHint);

然后声明动画类

 m_pAnimation = new QPropertyAnimation(this, "index"); //声明变量跟循环的函数 index
    m_pAnimation->setDuration(1000); //一秒循环一次
    m_pAnimation->setLoopCount(-1); // 无线循环
    m_pAnimation->setStartValue(0); //起始index
    m_pAnimation->setEndValue(3); // 结束index

每次都重新设置index

void MainWindow::setIndex(int index)
{
    m_pixIndex = index;
    update();
}

int MainWindow::getIndex()
{
    return m_pixIndex;
}

将资源文件塞到一个list里,每次都渲染一张图片

 m_imgList.push_back(QImage(":/res/1.png"));
    m_imgList.push_back(QImage(":/res/2.png"));
    m_imgList.push_back(QImage(":/res/3.png"));

void MainWindow::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);
    painter.drawImage(rect(), m_imgList.at(getIndex()));
}

最后上一个最终视频

小结

花了不到五分钟写完了,还跨平台。

使用MSVC19编译出来Debug内存占用8M。Qt真香。

如果使用QOpenGLWidget的话还可以以后走硬件加速。

换成qml的话估计会更快吧。

代码在这里 https://github.com/CryFeiFei/Qt_Teach/tree/master/Animation

原文出处:微信公众号【张小飞wps Qt那些事儿】

原文链接:https://mp.weixin.qq.com/s/QiunWyDEHI1Hqy3EcBGntA

本文观点不代表Dotnet9立场,转载请联系原作者。

发表评论

登录后才能评论