class QBlendedClipAnimator#

QBlendedClipAnimator 是一个组件,提供了对一组混合节点树进行动画播放的能力。 更多

Inheritance diagram of PySide6.Qt3DAnimation.Qt3DAnimation.QBlendedClipAnimator

摘要#

属性#

方法#

槽位#

信号#

注意:

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,也可以通过在https://bugreports.qt.io/projects/PYSIDE上创建票据的方式告知我们。

详细描述#

QBlendedClipAnimator的一个实例可以被QEntity聚集,以便添加播放动画片段的能力,并将计算的动画值应用到QObjects的属性上。

而QClipAnimator从单个动画片段获取动画数据,QBlendedClipAnimator可以融合多个片段。动画数据通过评估所谓的"融合树"获得。融合树是一种层级树结构,其中叶节点是封装动画片段(QAbstractAnimationClip)的值节点;内部节点表示操作其操作属性所指向节点的融合操作。

要将融合树与QBlendedClipAnimator关联,设置动画器的blendTree属性以指向融合树的根节点。

auto blendTreeRoot = new QAdditiveClipBlend();
...
auto animator = new QBlendedClipAnimator();
animator->setBlendTree(blendTreeRoot);

融合树可以从以下节点类型构建:

注意:

当动画器不运行时,应仅编辑融合节点树。

  • QClipBlendValue

  • QLerpClipBlend

  • QAdditiveClipBlend

随着时间的推移,将添加更多的节点类型。

举例来说,考虑以下融合树:

Clip0----
        |
        Lerp Node----
        |           |
Clip1----           Additive Node
                    |
            Clip2----

可以创建和使用如下:

// Create leaf nodes of blend tree
auto clip0 = new QClipBlendValue(
    new QAnimationClipLoader(QUrl::fromLocalFile("walk.json")));
auto clip1 = new QClipBlendValue(
    new QAnimationClipLoader(QUrl::fromLocalFile("run.json")));
auto clip2 = new QClipBlendValue(
    new QAnimationClipLoader(QUrl::fromLocalFile("wave-arm.json")));

// Create blend tree inner nodes
auto lerpNode = new QLerpClipBlend();
lerpNode->setStartClip(clip0);
lerpNode->setEndClip(clip1);
lerpNode->setBlendFactor(0.5f); // Half-walk, half-run

auto additiveNode = new QAdditiveClipBlend();
additiveNode->setBaseClip(lerpNode); // Comes from lerp sub-tree
additiveNode->setAdditiveClip(clip2);
additiveNode->setAdditiveFactor(1.0f); // Wave arm fully

// Run the animator
auto animator = new QBlendedClipAnimator();
animator->setBlendTree(additiveNode);
animator->setChannelMapper(...);
animator->setRunning(true);

通过编写一组动画片段,并在运行时使用融合树动态融合它们,我们可以打开大量可能的动画。以下是一些上述融合树的简单示例,其中alpha是加法因子,beta是lerp融合因子,我们可以得到一个二维的可能的动画连续体

(alpha = 0, beta = 1) Running, No arm waving --- (alpha = 1, beta = 1) Running, Arm waving
        |                                               |
        |                                               |
        |                                               |
(alpha = 0, beta = 0) Walking, No arm waving --- (alpha = 0, beta = 1) Running, No arm waving

更复杂的融合树为组合你的动画片段提供了更多的灵活性。请注意,用于控制融合树的值(上面的alpha和beta)是融合节点上的简单属性。这意味着,这些属性本身也可以由动画框架控制。

注意:

可以在使用from __feature__ import true_property时直接使用属性,否则通过存取函数使用。

属性 blendTreeᅟ: QAbstractClipBlendNode#

此属性包含在动画器插值之前将对其进行评估的动画融合树根。

存取函数
__init__([parent=None])#
参数:

parentQNode

blendTree()#
返回类型:

QAbstractClipBlendNode

相关内容

setBlendTree()

属性 blendTree 的获取器。

blendTreeChanged(blendTree)#
参数:

blendTreeQAbstractClipBlendNode

属性 blendTree 的变化通知信号。

setBlendTree(blendTree)#
参数:

blendTreeQAbstractClipBlendNode

相关内容

blendTree()

属性 blendTree 的设置器。