Qt QTimeLine跳过第一帧

时间:2017-02-25 23:02:37

标签: c++ qt animation

我正在让玩家在屏幕上移动,使用QTimeLine在指定时间内处理动画/动作。

在我的播放器构造函数中:

timeLine = new QTimeLine(500);
timeLine->setFrameRange(1, 4);
timeLine->setCurveShape(QTimeLine::CurveShape::LinearCurve);
QObject::connect(timeLine, SIGNAL(frameChanged(int)), this, SLOT(animatedMove(int)));

我删除了动画内容以显示问题:

void PlayerSprite::animatedMove(int frame)
{
    qDebug() << "Frame: " << frame;
}

计时器在一个插槽中启动,在按键时调用:

void PlayerSprite::move(Direction direction)
{
    timeLine->start();
}

输出结果为:

GameView: Player is moving
Frame:  2
Frame:  3
Frame:  4
GameView: Player is moving
Frame:  1
Frame:  2
Frame:  3
Frame:  4

但它应该是:

GameView: Player is moving
Frame:  1
Frame:  2
Frame:  3
Frame:  4
GameView: Player is moving
Frame:  1
Frame:  2
Frame:  3
Frame:  4

在每个帧期间,玩家移动,例如2个步骤。因此应该移动4x2 = 8步...但是在第一帧它只移动6步意味着我的角色掉出游戏网格。我正在制作一个小的16位RPG;)

这是因为假设我的播放器已经在它的第一帧吗? 如果是这样可以被覆盖?

1 个答案:

答案 0 :(得分:1)

这似乎是一个已知的错误:

https://bugreports.qt.io/browse/QTBUG-41610

在您的情况下,最简单的解决方法是将时间线的当前时间设置为创建时的持续时间:

timeLine = new QTimeLine(500);
timeLine->setFrameRange(1, 4);
timeLine->setCurveShape(QTimeLine::CurveShape::LinearCurve);
// Add this line:
timeLine->setCurrentTime(timeLine->duration());