gpt4 book ai didi

c++ - Qt QTimeLine 跳过第一帧

转载 作者:行者123 更新时间:2023-11-28 05:16:50 25 4
gpt4 key购买 nike

我正在使用 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 位角色扮演游戏 ;)

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

最佳答案

这似乎是一个已知错误:

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());

关于c++ - Qt QTimeLine 跳过第一帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42462658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com