# [name]

Um KeyframeTrack é uma sequência cronometrada de [link:https://en.wikipedia.org/wiki/Key_frame keyframes], que são compostos de listas de tempos e valores relacionados, e que são usados ​​para animar uma propriedade específica de um objeto.

Para obter uma visão geral dos diferentes elementos do sistema de animação three.js, consulte o artigo "Sistema de animação" na seção "Próximos Passos" do manual.

Em contraste com a hierarquia de animação do [link:https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3 JSON model format] uma `KeyframeTrack` não armazena seus keyframes únicos como objetos em um array de "chaves" (mantendo os tempos e os valores de cada frame juntos em um só lugar).

Em vez disso, há sempre dois arrays em um `KeyframeTrack`: o array [page:.times times] armazena os valores de tempo para todos os keyframes desta track em ordem sequencial, e o array [page:.values values] contém os valores alterados correspondentes da propriedade animada.

Um único valor, pertencente a um determinado ponto do tempo, pode não ser apenas um simples número, mas (por exemplo) um vetor (se uma posição for animada) ou um quaternion (se uma rotação for animada). Por isso o array de valores (que também é um array plano) pode ser três ou quatro vezes maior que o array de tempo.

Correspondendo aos diferentes tipos possíveis de valores animados existem várias subclasses de `KeyframeTrack`, herdando a maioria das propriedades e métodos:

- [page:BooleanKeyframeTrack]
- [page:ColorKeyframeTrack]
- [page:NumberKeyframeTrack]
- [page:QuaternionKeyframeTrack]
- [page:StringKeyframeTrack]
- [page:VectorKeyframeTrack]

Alguns exemplos de como criar manualmente [page:AnimationClip AnimationClips] com diferentes tipos de KeyframeTracks pode ser encontrado no arquivo [link:https://threejs.org/examples/jsm/animation/AnimationClipCreator.js AnimationClipCreator].

Como os valores explícitos são especificados apenas para os pontos discretos de tempo armazenados no array de tempo, todos os valores intermediários devem ser interpolados.

O nome da track é importante para a conexão desta track com uma propriedade específica do nó animado (feito por [page:PropertyBinding]).

## Construtor

### [name]( [param:String name], [param:Array times], [param:Array values], [param:Constant interpolation] )

[page:String name] - o identificador do `KeyframeTrack`.
[page:Array times] - um array de keyframes, convertidos internamente para um [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array].
[page:Array values] - um array com os valores relacionados ao array times, convertidos internamente para um [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array].
[page:Constant interpolation] - o tipo de interpolação a ser usado. Ver [page:Animation Animation Constants] para valores possíveis. O padrão é [page:Animation InterpolateLinear].

## Propriedades

### [property:String name]

O nome da track pode se referir a morph targets ou [page:SkinnedMesh bones] ou possivelmente outros valores dentro de um objeto animado. Ver [page:PropertyBinding.parseTrackName] para as formas de strings que podem ser analisadas para propriedades vinculativas:

O nome pode especificar o nó usando seu nome ou seu uuid (embora precise estar na subárvore do nó do grafo de cena passado para o mixer). Ou, se o nome da track começar com um ponto, a track se aplica ao nó raiz que foi passado para o mixer.

Normalmente, após o nó, uma propriedade será especificada diretamente. Mas você também pode especificar um subpropriedade, como .rotation[x], se você quiser apenas direcionar o componente X da rotação através de uma track flutuante.

Você também pode especificar bones ou multimateriais usando um nome de objeto, por exemplo: .bones[R_hand].scale; o canal vermelho da cor difusa do quarto material em um array de materiais - como um exemplo - pode ser acessado com .materials[3].diffuse[r].

PropertyBinding também resolverá nomes de morph targets, por exemplo: .morphTargetInfluences[run].

Nota: o nome da track não precisa necessariamente ser único. Várias tracks podem conduzir a mesma propriedade. O resultado deve ser baseado em uma mistura ponderada entre as várias tracks de acordo com os pesos de suas respectivas ações.

### [property:Float32Array times]

Um [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array], convertido do array de tempos que é passado no construtor.

### [property:Float32Array values]

Um [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array], convertido do array de valores que é passada no construtor.

### [property:Constant DefaultInterpolation]

O tipo de interpolação padrão: [page:Animation InterpolateLinear].

### [property:Constant TimeBufferType ]

[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array], o tipo de buffer usado internamente para os tempos.

### [property:Constant ValueBufferType ]

[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array], o tipo de buffer usado internamente para os valores.

## Métodos

### [method:KeyframeTrack clone]()

Retorna uma cópia desta track.

### [method:Interpolant createInterpolant]()

Cria um [page:LinearInterpolant LinearInterpolant], [page:CubicInterpolant CubicInterpolant] ou [page:DiscreteInterpolant DiscreteInterpolant], dependendo do valor do parâmetro interpolação passado no construtor.

### [method:Interpolant getInterpolation]()

Retorna o tipo da interpolação.

### [method:Number getValueSize]()

Retorna o tamanho de cada valor (que é o comprimento do array [page:.values values] dividido pelo comprimento do array [page:.times times]).

### [method:DiscreteInterpolant InterpolantFactoryMethodDiscrete]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )

Cria uma nova [page:DiscreteInterpolant DiscreteInterpolant] a partir do [page:KeyframeTrack.times times] e [page:KeyframeTrack.times values]. Um Float32Array pode ser passado e receberá os resultados. Caso contrário, um novo array com o tamanho apropriado será criado automaticamente.

### [method:LinearInterpolant InterpolantFactoryMethodLinear]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )

Cria uma nova [page:LinearInterpolant LinearInterpolant] a partir do [page:KeyframeTrack.times times] e [page:KeyframeTrack.times values]. Um Float32Array pode ser passado e receberá os resultados. Caso contrário, um novo array com o tamanho apropriado será criado automaticamente.

### [method:CubicInterpolant InterpolantFactoryMethodSmooth]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )

Cria uma nova [page:CubicInterpolant CubicInterpolant] a partir do [page:KeyframeTrack.times times] e [page:KeyframeTrack.times values]. Um Float32Array pode ser passado e receberá os resultados. Caso contrário, um novo array com o tamanho apropriado será criado automaticamente.

### [method:this optimize]()

Remove chaves sequenciais equivalentes, que são comuns em morph targets.

### [method:this scale]()

Dimensiona todos os tempos de keyframe por um fator.
Nota: Isso é útil, por exemplo, para conversões para uma determinada taxa de quadros por segundo (como é feito internamente por [page:AnimationClip.CreateFromMorphTargetSequence animationClip.CreateFromMorphTargetSequence]).

### [method:this setInterpolation]( [param:Constant interpolationType] )

Define o tipo de interpolação. Veja [page:Animation Animation Constants] para opções.

### [method:this shift]( [param:Number timeOffsetInSeconds] )

Move todos os keyframes para frente ou para trás no tempo.

### [method:this trim]( [param:Number startTimeInSeconds], [param:Number endTimeInSeconds] )

Remove keyframes antes de `startTime` e depois de `endTime`, sem alterar nenhum valor dentro do intervalo [`startTime`, `endTime`].

### [method:Boolean validate]()

Executa validação mínima nas tracks. Retorna verdadeiro se válido.

Este método registra erros no console se uma track estiver vazia, se o [page:.valueSize value size] não for válido, se um item no array [page:.times times] ou [page:.values values] não for um número válido ou se os itens no array `times` estiverem fora de ordem.

## Métodos Estáticos

### [method:JSON toJSON]( [param:KeyframeTrack track] )

Converte a track para JSON.

## Source

[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]