FrameAnimation QML Type

アニメーションのフレームが更新されるたびにハンドラをトリガーします。詳細...

Import Statement: import QtQuick
Since: Qt 6.4

プロパティ

信号

方法

詳しい説明

FrameAnimation は、アニメーションが進行し、アニメーションフレームがレンダリングされるたびにアクションをトリガーするために使用できます。スレッドと基本的なレンダリングループについての詳細な情報は、シーングラフについてのドキュメントを参照してください。

一般的なアニメーションでは、NumberAnimation や他のAnimation 要素を使用することを好みます。これらは、アニメーションを記述する宣言的な方法を提供するからです。

一方、FrameAnimationは、カスタム命令型アニメーションや、以下のようなユースケースで使用する必要があります:

  • フレームが更新されるたびに何らかのコードを実行する必要がある場合。例えば、プログレッシブ・レンダリングを使用している場合など。
  • アニメーション中にスピードやターゲットが変化する場合、通常のQMLアニメーションでは限界があります。
  • より正確なフレーム更新時間が必要な場合、例えばfpsカウンターの場合。

interval の時間を設定できるTimer と比較して、FrameAnimation はアニメーションの更新と常に同期して動作します。以下のようなカスタムアニメーションのために短い間隔でTimer を使用している場合は、よりスムーズなアニメーションのために、代わりに FrameAnimation を使用するように切り替えることを検討してください。

// BAD
Timer {
    interval: 16
    repeat: true
    running: true
    onTriggered: {
        // Animate something
    }
}

// GOOD
FrameAnimation {
    running: true
    onTriggered: {
        // Animate something
    }
}

プロパティの説明

currentFrame : int [read-only]

このプロパティは、開始からのフレーム更新数を保持します。フレームアニメーションが再開されると、currentFrame は0 から始まります。

次の例は、フレーム更新に反応する方法を示しています。

FrameAnimation {
    running: true
    onTriggered: {
        // Run code on every frame update.
    }
}

このプロパティは、n番目のフレームごとにのみレンダリングするために使用することもできます。UIに2つの重い要素があり、全体のフレームレートをスムーズな60fpsにするために、これらの重い要素を30fpsでレンダリングし、1つ目は偶数フレームごとに、2つ目は奇数フレームごとにレンダリングするような高度な使い方を考えてみましょう:

FrameAnimation {
    running: true
    onTriggered: {
        if (currentFrame % 2 == 0)
            updateUIElement1();
        else
            updateUIElement2();
   }
}

デフォルトでは、frame は 0 です。


elapsedTime : real [read-only]

このプロパティは、前回の開始からの時間(秒)を保持します。

デフォルトでは、elapsedTime は0である。


frameTime : real [read-only]

このプロパティは、前回のフレーム更新からの時間(秒)を保持します。

次の例では、frameTime を使用して、画面のリフレッシュレートと可能な fps 低下に合わせて、速度を変化させながらアイテムをアニメーションさせる方法を示します。

Rectangle {
    id: rect
    property real speed: 90
    width: 100
    height: 100
    color: "red"
    anchors.centerIn: parent
}

FrameAnimation {
    id: frameAnimation
    running: true
    onTriggered: {
        // Rotate the item speed-degrees / second.
        rect.rotation += rect.speed * frameTime
    }
}

デフォルトでは、frameTime は 0 です。


paused : bool

trueに設定すると、フレームアニメーションを一時停止します。

paused デフォルトは false です。

pause() およびresume()も参照


running : bool

trueに設定するとフレームアニメーションを開始し、そうでなければ停止する。

running デフォルトは false です。

stop()、start()、restart()も参照して ください。


smoothFrameTime : real [read-only]

このプロパティは、直前のフレーム更新からの平滑化時間(秒)を保持します。

次の例では、smoothFrameTime を使用して平均 fps を表示しています。

Text {
    text: "fps: " + frameAnimation.fps.toFixed(0)
}

FrameAnimation {
    id: frameAnimation
    property real fps: smoothFrameTime > 0 ? (1.0 / smoothFrameTime) : 0
    running: true
}

デフォルトでは、smoothFrameTime は 0 です。


シグナル ドキュメント

triggered()

このシグナルは、FrameAnimation が新しいフレームに進んだときに発せられます。

注: 対応するハンドラはonTriggered です。


メソッドの説明

pause()

フレームアニメーションを一時停止する

フレームアニメーションがすでに一時停止されているか、running されていない場合、このメソッドを呼び出しても効果はありません。pause() を呼び出すと、paused プロパティは真になります。


reset()

フレームアニメーションのプロパティをリセットする

このメソッドを呼び出すと、frameelapsedTime が初期値(0)にリセットされます。このメソッドは、running またはpaused プロパティには影響せず、それらが true または false のときに呼び出すことができます。

reset() restart() pause() と の違いは、 は常にプロパティを初期化するのに対し、 は次のフレーム更新時にのみ初期化することです。restart() reset() restart()


restart()

フレームアニメーションを再開する

FrameAnimation が実行中でない場合は開始され、そうでない場合は停止され、初期状態にリセットされてから開始されます。restart() を呼び出すと、running プロパティは真になります。


resume()

一時停止中のフレームアニメーションを再開する

フレームアニメーションが一時停止されていないか、running されていない場合、このメソッドを呼び出しても効果はありません。resume() への呼び出し後、paused プロパティは false になります。


start()

フレームアニメーションを開始する

フレームアニメーションがすでに実行されている場合、このメソッドを呼び出しても効果はありません。start() を呼び出すと、running プロパティは true になります。


stop()

フレームアニメーションを停止する

フレームアニメーションが実行されていない場合、このメソッドを呼び出しても効果はありません。stop() を呼び出すと、runningpaused の両プロパティは false になります。


© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.