二维矢量动画智能制作软件开发合集
个人开发二维矢量动画智能制作软件界面如下:
目录
2.示例效果
相机工具
本篇介绍软件左侧工具栏→相机工具
相机工具操作包括3个:
1)镜头移动;
2)镜头变焦
3)镜头旋转
一、相机工具原理
本软件通过QGraphicsItem自带的相关方法实现相机工具的功能。
① 镜头移动:相比于QGraphicsItem的setPos()方法,本软件采用QGraphicsItem的moveBy()方法(参数详见Qt官方文件),该函数可以更方便的在mouseMoveEvent()中实现物体可鼠标移动的一致性;
② 镜头变焦:由于相机变焦在各个方向上变化相同,不存在在x轴、y轴上缩放不一致的现象,故而可以直接采用QGraphicsItem的setScale()方法实现;
③ 镜头旋转:采用QGraphicsItem的setRotation()方法实现,难点在于如何保持相机和鼠标旋转角度一致,本软件采用QLineF类中的angleTo()方法,计算鼠标实时旋转角度,在旋转前,记录相机原始角度,当鼠标旋转时,相机在原始角度基础上保持同样的角度位移。
二、镜头移动实现
1.代码示例
.h文件变量申明:
QGraphicsItem *cameraItem;
QPointF startNodePos,endNodePos;
void Scene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
endNodePos = mouseEvent->scenePos();
cameraItem->moveBy(endNodePos.x() - startNodePos.x(),endNodePos.y() - startNodePos.y());
startNodePos = mouseEvent->scenePos();
}
2.示例效果
详见本文第5节。
三、镜头变焦实现
1.代码示例
.h文件变量申明:
QGraphicsItem *cameraItem;
QPointF startNodePos,endNodePos;
void Scene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
endNodePos = mouseEvent->scenePos();
cameraItem->setScale(cameraItem->scale()+0.005*(endNodePos.x()-startNodePos.x()));
startNodePos = mouseEvent->scenePos();
}
2.示例效果
详见本文第5节。
四、镜头旋转实现
1.代码示例
.h文件变量申明:
QGraphicsItem *cameraItem;
QPointF startNodePos,endNodePos;
QList<qreal> OriginR;
QLineF line1,line2;
void Scene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
OrginR.clear();
OrginR.append(cameraItem->rotation());
line1.setPoints(cameraItem->scenePos(), mouseEvent->scenePos());
line2.setP1(cameraItem->scenePos());
}
void Scene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
line2.setP2(mouseEvent->scenePos());
if(OrginR[0] + line2.angleTo(line1) > 180)
cameraItem->setRotation(OrginR[0] + line2.angleTo(line1) - 360);
else
cameraItem->setRotation(OrginR[0] + line2.angleTo(line1));
}
2.示例效果
详见本文第5节。
五、相机工具测试视频
相机工具
结束语
本文简要梳理了软件【相机工具】的实现框架,内容均为原创。
作者文笔水平一般,请大家多多包涵和指正,十分欢迎进一步交流学习。
若需,请联系本人小红书(小红书号:YzLab96),谢谢。
链接: 软件开发及测试所有视频合集见小红书