- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 QGraphics 对象来显示它们之间带有箭头的框。我想要那些从一端开始到另一端的箭头/线的动画。
当箭头的开始和结束位置在 QTimeLine 执行期间没有改变时动画效果很好,即我让 View 保持静态。但是由于用户可以四处拖动方框(因此我重绘了要跟随的箭头)我需要重置 QGraphicsItemAnimation 中的开始和结束位置,以便动画匹配新的箭头线。
我试图更新 Arrow 对象的 paint 方法中的开始和结束位置,但这只会让动画变得疯狂(它在整个地方随机翻转)。我假设这是因为我在 QTimeLine 对象处于 RUNNING 状态时更改了动画位置。
void Arrow::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
...
///update the arrow to have a new source and destination, draw arrow, etc
...
if (mAnimate)
{
mAnimationObj->setPosAt(0, mSourcePoint);
mAnimationObj->setPosAt(1, mDestPoint);
}
}
我应该如何动态更改 QGraphicsItemAnimation 的开始和结束位置(0 和 1)?
对于最终产品,我希望用户能够四处拖动框,让箭头跟随(目前有效)以及让动画沿着新的箭头路线继续。
如果这不可能,那么我需要想出一些方法来捕获拖动并停止箭头动画,直到用户释放,然后我想重置它...?
最佳答案
我想您只需要制作一个通用动画,即使用 QTimeLine 在 0.0 和 1.0 之间制作动画。来自其 currentValue , 执行 interpolation (自己)找出需要放置动画对象的位置。例如,对于 0.5 的值,对象应位于开始位置和结束位置之间的中间位置。
请注意,如果开始位置和结束位置之间的距离不断变化,则此补间技巧将不起作用。您可能会导致动画对象在动画中间来回反弹。这样做的一个技巧是保持动画对象位置和起始位置之间的距离,如果当前时间的插值距离小于前一个时间,则不要推回对象。移动起点和终点的中间点还有更复杂的技术,除非必要,在此不再赘述。
关于c++ - 使用 QTimeline 制作动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/832284/
我有一个QGraphicsItem,我想为它制作尺寸变化的动画。因此,我需要随时间改变对象的 height 和 width。我过去曾将 QTimeLine 用于单变量动画,如果可能的话,我想在这里将其
我正在使用 QTimeLine 使播放器在屏幕上移动,以在指定时间内处理动画/移动。 在我的播放器构造函数中: timeLine = new QTimeLine(500); timeLine->set
我正在使用 QGraphics 对象来显示它们之间带有箭头的框。我想要那些从一端开始到另一端的箭头/线的动画。 当箭头的开始和结束位置在 QTimeLine 执行期间没有改变时动画效果很好,即我让 V
正如问题中所述,当我尝试使用 QGraphicsItemAnimation 的 setPosAt() 函数简单地对圆进行动画处理时,我在终端中收到此警告消息,并且我对此警告的起源感到非常困惑。我的代码
我是一名优秀的程序员,十分优秀!