背景:kanzi使用属性目标插值器 (Property Target Interpolator) 动画化属性值,但是无法打断插值动画,将属性目标插值器的Acceleration改为1000可以让动画立刻完成,但是常规手段无法修改。
可以用插件实现,或者简单封装一个函数实现Acceleration修改。
原理
节点对象通过遍历获取所有NodeComponents
找到PropertyTargetInterpolator对象,用setAcceleration修改加速度;再用removeNodeComponent移除,并用addNodeComponent添加回来。
核心原理
void InterpolatePlugin::HandleNode2DofInterpolate(kanzi::Node2DSharedPtr node, float acceleration)
{
NodeComponentConstIterator iter = node->beginNodeComponents();
for (iter; iter != node->endNodeComponents(); ++iter) {
NodeComponentSharedPtr nodeComponent = iter->nodeComponent;
//kzLogDebug(("=====getName=== {}", nodeComponent->getName()));
kanzi::PropertyTargetInterpolatorSharedPtr interpolatorSharedPtr = dynamic_pointer_cast<kanzi::PropertyTargetInterpolator>(nodeComponent);
if (!interpolatorSharedPtr) continue;
//float acc = interpolatorSharedPtr->getAcceleration();
//kzLogDebug(("===acc===== {}", acc));
interpolatorSharedPtr->setAcceleration(acceleration);
//kzLogDebug(("===acc===== {}", m_lastAcceleration));
node->removeNodeComponent(*nodeComponent);
node->addNodeComponent(nodeComponent);
break;
}
}