Class: ModelAnimationCollection

ModelAnimationCollection

new ModelAnimationCollection()

访问模型的动画 Model#activeAnimations。不要直接调用构造函数

活动模型动画的集合。

See:

Members

animateWhilePausedboolean

当为true时,即使场景时间暂停,动画也会播放。但是, 是否进行动画将取决于分配给模型动画的animationTime函数。 默认情况下,这基于场景时间,因此使用默认设置的模型无论此设置如何都不会动画。

Default Value:
false

animationAddedEvent

当动画添加到集合时触发的事件。这可以用于,例如,保持UI同步。

Default Value:
new Event()
Example
model.activeAnimations.animationAdded.addEventListener(function(model, animation) {
  console.log(`Animation added: ${animation.name}`);
});

animationRemovedEvent

当动画从集合中移除时触发的事件。这可以用于,例如,保持UI同步。

Default Value:
new Event()
Example
model.activeAnimations.animationRemoved.addEventListener(function(model, animation) {
  console.log(`Animation removed: ${animation.name}`);
});

readonly lengthnumber

集合中动画的数量。

readonly modelModel

拥有此动画集合的模型。

Methods

add(options){ModelAnimation}

创建具有指定初始属性的动画并将其添加到集合中。

这会触发 ModelAnimationCollection#animationAdded 事件,例如,UI可以保持同步。

Name Type Description
options object

具有以下属性的对象:

Name Type Default Description
name string 可选

标识动画的glTF动画名称。如果 options.indexundefined,则必须定义。

index number 可选

标识动画的glTF动画索引。如果 options.nameundefined,则必须定义。

startTime JulianDate 可选

开始播放动画的场景时间。当为 undefined 时,动画在下一帧开始。

delay number 0.0 可选

startTime 到开始播放的延迟(以秒为单位)。只有当 options.loop 为 ModelAnimationLoop.NONE 时,这才会影响动画。

stopTime JulianDate 可选

停止播放动画的场景时间。当为 undefined 时,动画播放其完整持续时间。

removeOnStop boolean false 可选

当为 true 时,动画在停止播放后被移除。只有当 options.loop 为 ModelAnimationLoop.NONE 时,这才会影响动画。

multiplier number 1.0 可选

大于 1.0 的值增加动画相对于场景时钟速度的播放速度;小于 1.0 的值降低速度。

reverse boolean false 可选

当为 true 时,动画反向播放。

loop ModelAnimationLoop ModelAnimationLoop.NONE 可选

确定动画是否循环以及如何循环。

animationTime ModelAnimation.AnimationTimeCallback 可选

如果已定义,则计算此动画的本地动画时间。

Throws:
  • 动画未加载。等待 Model#ready 返回true。

    Type
    DeveloperError
  • options.name必须是有效的动画名称。

    Type
    DeveloperError
  • options.index必须是有效的动画索引。

    Type
    DeveloperError
  • options.name或options.index必须定义其一。

    Type
    DeveloperError
  • options.multiplier必须大于零。

    Type
    DeveloperError
Returns:
Type Description
ModelAnimation 添加到集合中的动画。
Examples
// 示例1. 按名称添加动画
model.activeAnimations.add({
  name : 'animation name'
});
// 示例2. 按索引添加动画
model.activeAnimations.add({
  index : 0
});
// 示例3. 添加动画并提供所有属性和事件
const startTime = SuperMap3D.JulianDate.now();

const animation = model.activeAnimations.add({
  name : 'another animation name',
  startTime : startTime,
  delay : 0.0,                                 // 在startTime播放(默认)
  stopTime : SuperMap3D.JulianDate.addSeconds(startTime, 4.0, new SuperMap3D.JulianDate()),
  removeOnStop : false,                        // 动画停止时不移除(默认)
  multiplier : 2.0,                            // 以双倍速度播放
  reverse : true,                              // 反向播放
  loop : SuperMap3D.ModelAnimationLoop.REPEAT      // 循环动画
});

animation.start.addEventListener(function(model, animation) {
  console.log(`Animation started: ${animation.name}`);
});
animation.update.addEventListener(function(model, animation, time) {
  console.log(`Animation updated: ${animation.name}. glTF animation time: ${time}`);
});
animation.stop.addEventListener(function(model, animation) {
  console.log(`Animation stopped: ${animation.name}`);
});

addAll(options){Array.<ModelAnimation>}

为模型中的所有动画创建具有指定初始属性的动画并将它们添加到集合中。

这会为每个模型触发 ModelAnimationCollection#animationAdded 事件,例如,UI可以保持同步。

Name Type Description
options object 可选

具有以下属性的对象:

Name Type Default Description
startTime JulianDate 可选

开始播放动画的场景时间。当为 undefined 时,动画在下一帧开始。

delay number 0.0 可选

startTime 到开始播放的延迟(以秒为单位)。只有当 options.loop 为 ModelAnimationLoop.NONE 时,这才会影响动画。

stopTime JulianDate 可选

停止播放动画的场景时间。当为 undefined 时,动画播放其完整持续时间。

removeOnStop boolean false 可选

当为 true 时,动画在停止播放后被移除。只有当 options.loop 为 ModelAnimationLoop.NONE 时,这才会影响动画。

multiplier number 1.0 可选

大于 1.0 的值增加动画相对于场景时钟速度的播放速度;小于 1.0 的值降低速度。

reverse boolean false 可选

当为 true 时,动画反向播放。

loop ModelAnimationLoop ModelAnimationLoop.NONE 可选

确定动画是否循环以及如何循环。

animationTime ModelAnimation.AnimationTimeCallback 可选

如果已定义,则计算所有动画的本地动画时间。

Throws:
  • 动画未加载。等待 Model#ready 返回true。

    Type
    DeveloperError
  • options.multiplier必须大于零。

    Type
    DeveloperError
Returns:
Type Description
Array.<ModelAnimation> 一个 ModelAnimation 对象数组,每个添加到集合中的动画对应一个。如果没有glTF动画,数组为空。
Example
model.activeAnimations.addAll({
  multiplier : 0.5,                            // 以半速播放
  loop : SuperMap3D.ModelAnimationLoop.REPEAT      // 循环动画
});

contains(runtimeAnimation){boolean}

确定此集合是否包含给定的动画。

Name Type Description
runtimeAnimation ModelAnimation

要检查的运行时动画。

Returns:
Type Description
boolean 如果此集合包含动画则为 true,否则为 false

get(index){ModelAnimation}

返回集合中指定索引处的动画。索引从零开始, 并随着动画的添加而增加。移除动画会将其后面的所有动画向左移动, 改变它们的索引。此函数通常用于迭代集合中的所有动画。

Name Type Description
index number

动画的从零开始的索引。

Returns:
Type Description
ModelAnimation 指定索引处的运行时动画。
Example
// 输出集合中所有动画的名称。
const animations = model.activeAnimations;
const length = animations.length;
for (let i = 0; i < length; ++i) {
  console.log(animations.get(i).name);
}

remove(runtimeAnimation){boolean}

从集合中移除动画。

这会触发 ModelAnimationCollection#animationRemoved 事件,例如,UI可以保持同步。

通过将 ModelAnimationCollection#removeOnStop 设置为 true, 也可以隐式地从集合中移除动画。当动画被移除时,仍会触发 ModelAnimationCollection#animationRemoved 事件。

Name Type Description
runtimeAnimation ModelAnimation

要移除的运行时动画。

Returns:
Type Description
boolean 如果动画被移除则为 true;如果在集合中未找到动画则为 false
Example
const a = model.activeAnimations.add({
  name : 'animation name'
});
model.activeAnimations.remove(a); // Returns true

removeAll()

从集合中移除所有动画。

这会为每个动画触发 ModelAnimationCollection#animationRemoved 事件, 例如,UI可以保持同步。