0
QTimeLineを使用してプレーヤーを画面全体に移動させ、指定された時間内にアニメーション/動きを処理します。私のプレーヤーのコンストラクタでQt 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を作っています;)
私のプレーヤーはすでにそれが最初のフレームであると仮定されているので、これはですか? もしそうなら、これは無効にすることができますか?
私はこれがどのような理由でこれのように振る舞うのだろうと思っていました。私には分かりませんでした。簡単にやり直してくれてありがとう。将来、どのようにこれを追跡しましたか? Googleはまったく役に立たなかった。 – ovg
私の正確なGoogle検索用語は「qt bug qtimeline」でした。 –
ああ、OK。次回はシンプルなものを試してみてください。) – ovg