持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情
静态图形已经完成了,接下来最重要的就是如何让图形动起来!
主要用到的函数:QParallelAnimationGroup
、QPropertyAnimation
实现流程:
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:区域范围设置
设置动画属性时,可以调用setStartValue
和setEndValue
设置属性的开始和结束值。
这两个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++开发程序猿~