Qt|会跳舞的机器人-动画效果

213 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

静态图形已经完成了,接下来最重要的就是如何让图形动起来

主要用到的函数:QParallelAnimationGroupQPropertyAnimation

实现流程:

1:对每个肢体部分分别创建对应的属性动画

2:将所有的属性动画添加到并行动画组类中,自行设置属性

3:start()方式让整体图形动起来

那么接下来,我们就开始实现!

第一步:创建并行动画组类

类名:QParallelAnimationGroup

QParallelAnimationGroup *animation = new QParallelAnimationGroup(this);

所有的动画由一个顶级并行动画组控制。我们将所有的肢体属性动画都会加入到该类中,用于启动动画操作。

举例,添加头部动画:animation->addAnimation(headAnimation);

此时,headAnimation代表的是头部属性动画。

第二步:对每个肢体进行属性动画设置

QPropertyAnimation *headAnimation = new QPropertyAnimation(headItem, "rotation");
headAnimation->setStartValue(20);
headAnimation->setEndValue(-20);
animation->addAnimation(headAnimation);

1:构造函数

QPropertyAnimation构造函数中,大家有没有发现,第二个参数传入了一个字符串?这个字符串究竟有什么作用呢?

构造一个QPropertyAnimation对象时,第一个参数代表了动画作用的对象,此时我们就拿机器人的头部作为例子。

也就是:QGraphicsObject *headItem = new QRobotHead(this);//创建:机器人头。在讲解静态机器人绘图时已经定义过。

第二个参数表示机器人头部的属性。在程序中可以自定义设计名称,根据我们程序需要。

2:区域范围设置

设置动画属性时,可以调用setStartValuesetEndValue设置属性的开始和结束值。

这两个API其实是属于QVariantAnimation的函数。该类也属于动画框架的一部分,作为属性和项目动画的基类,具有共享功能的函数。

设置了最大、最小值范围后,该如何让图形动起来呢?

这里,可以通过调用setEasingCurve()来设置缓动曲线,并通过调用setDuration()来配置持续时间。

代码详情,如下:

for (int i = 0; i < animation->animationCount(); ++i) 
{
    QPropertyAnimation *anim = qobject_cast<QPropertyAnimation *>(animation->animationAt(i));
    anim->setEasingCurve(QEasingCurve::SineCurve);
    anim->setDuration(2000);
}

代码解析:

将机器人的所有肢体都进行属性动画设置,并且添加到QParallelAnimationGroup中,该类就好像一个容器一样,触发start()函数就可以让小机器人动起来了!

3:让图形动起来

前两个步骤的工作准备好之后,这是见证奇迹的一步骤啦!

animation->setLoopCount(-1);
animation->start();

这样图形就可以动起来了!

到这里,会跳舞的机器人就已经实现完成啦!

我是中国好公民st,一名C++开发程序猿~