# [name]

AnimationAction programa o desempenho das animações que são armazenadas em [page:AnimationClip AnimationClips].
Nota: A maioria dos métodos da AnimationAction podem ser encadeados.
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.

## Construtor

### [name]( [param:AnimationMixer mixer], [param:AnimationClip clip], [param:Object3D localRoot] )

[page:AnimationMixer mixer] - o `AnimationMixer` que é controlado por esta ação.
[page:AnimationClip clip] - o `AnimationClip` que contém os dados da animação para esta ação.
[page:Object3D localRoot] - o objeto raiz no qual esta ação é executada.
Nota: Ao invés de chamar este construtor diretamente, você deve instanciar um AnimationAction com [page:AnimationMixer.clipAction] uma vez que este método fornece cache para melhor desempenho.

## Propriedades

### [property:Boolean clampWhenFinished]

Se `clampWhenFinished` estiver definido como true a animação será automaticamente [page:.paused pausada] em seu último quadro.
Se `clampWhenFinished` estiver definido como false, [page:.enabled enabled] será trocado automaticamente para false quando o último loop da ação terminar, para que esta ação não tenha mais impacto.
O padrão é falso.
Nota: `clampWhenFinished` não tem impacto se a ação for interrompida (só tem efeito se seu último loop realmente terminou).

### [property:Boolean enabled]

Definir `enabled` como `false` desativa esta ação, para que não tenha efeito. O padrão é `true`.
Quando a ação é reativada, a animação continua de seu [page:.time time] (tempo) (configurar `enabled` para `false` não redefine a ação).
Nota: Definir `enabled` como `true` não reinicia automaticamente a animação. Configurar `enabled` para `true` só reiniciará a animação imediatamente se a seguinte condição for atendida: [page:.paused paused] é `false`, esta ação não foi desativada nesse meio tempo (executando um comando [page:.stop stop] ou [page:.reset reset]), e nem [page:.weight weight] nem [page:.timeScale timeScale] são `0`.

### [property:Number loop]

O modo de looping (pode ser alterado com [page:.setLoop setLoop]). O padrão é [page:Animation THREE.LoopRepeat] (com um número infinito de [page:.repetitions repetitions] (repetições)).
Deve ser uma destas constantes:
[page:Animation THREE.LoopOnce] - reproduzindo o clipe uma vez,
[page:Animation THREE.LoopRepeat] - reproduzindo o clipe com o número escolhido de `repetições`, cada vez pulando do final do clipe diretamente para o início,
[page:Animation THREE.LoopPingPong] - reproduzindo o clipe com o número escolhido de `repetições`, tocando alternadamente para frente e para trás.

### [property:Boolean paused]

Definir `paused` como `true` pausa a execução da ação definindo a escala de tempo efetiva para '0'. O padrão é `false`.

### [property:Number repetitions]

O número de repetições do [page:AnimationClip] ao longo desta ação. Pode ser definido através de [page:.setLoop setLoop]. O padrão é `Infinity`.
Definir este número não tem efeito se o [page:.loop modo de loop] está configurado como [page:Animation THREE.LoopOnce].

### [property:Number time]

O tempo local desta ação (em segundos, começando com `0`).
O valor é fixado ou encapsulado em `0...clip.duration` (de acordo com o estado do loop). Pode ser dimensionado em relação ao tempo do mixer global, alterando [page:.timeScale timeScale] (usando [page:.setEffectiveTimeScale setEffectiveTimeScale] ou [page:.setDuration setDuration]).

### [property:Number timeScale]

Fator de escala para o [page:.time tempo]. Um valor de `0` faz com que a animação seja pausada. Valores negativos fazem com que a animação seja reproduzida para trás. O padrão é `1`.
Propriedades/métodos referentes a `timeScale` (respectivamente `time`) são: [page:.getEffectiveTimeScale getEffectiveTimeScale], [page:.halt halt], [page:.paused paused], [page:.setDuration setDuration], [page:.setEffectiveTimeScale setEffectiveTimeScale], [page:.stopWarping stopWarping], [page:.syncWith syncWith], [page:.warp warp].

### [property:Number weight]

O grau de influência desta ação (no intervalo `[0, 1]`). Valores entre '0' (sem impacto) e 1 (impacto total) podem ser usados para mesclar várias ações. O padrão é `1`.
Propriedades/métodos relativos a `weight` são: [page:.crossFadeFrom crossFadeFrom], [page:.crossFadeTo crossFadeTo], [page:.enabled enabled], [page:.fadeIn fadeIn], [page:.fadeOut fadeOut], [page:.getEffectiveWeight getEffectiveWeight], [page:.setEffectiveWeight setEffectiveWeight], [page:.stopFading stopFading].

### [property:Boolean zeroSlopeAtEnd]

Ativa interpolação suave sem separar clipes por início, loop e fim. O padrão é `true`.

### [property:Boolean zeroSlopeAtStart]

Ativa interpolação suave sem separar clipes por início, loop e fim. O padrão é `true`.

## Métodos

### [method:this crossFadeFrom]( [param:AnimationAction fadeOutAction], [param:Number durationInSeconds], [param:Boolean warpBoolean] )

Faz com que a ação [page:.fadeIn fade in] esmaeça outra ação simultaneamente, dentro do intervalo de tempo passado. Este método pode ser encadeado.
Se warpBoolean for true, [page:.warp warping] (mudanças graduais das escalas de tempo) adicional será aplicado.
Nota: Como em `fadeIn`/`fadeOut`, o desvanecimento começa/termina com um peso de 1.

### [method:this crossFadeTo]( [param:AnimationAction fadeInAction], [param:Number durationInSeconds], [param:Boolean warpBoolean] )

Faz com que a ação [page:.fadeOut fade out] esmaeça em outra ação simultaneamente, dentro do intervalo de tempo passado. Este método pode ser encadeado.
Se warpBoolean for true, [page:.warp warping] (mudanças graduais das escalas de tempo) adicional será aplicado.
Nota: Como com `fadeIn`/`fadeOut`, o desvanecimento começa/termina com um peso de 1.

### [method:this fadeIn]( [param:Number durationInSeconds] )

Aumenta o [page:.weight weight] desta ação gradualmente de `0` para `1`, dentro do intervalo de tempo decorrido. Este método pode ser encadeado.

### [method:this fadeOut]( [param:Number durationInSeconds] )

Diminui o [page:.weight weight] desta ação gradualmente de `1` para `0`, dentro do intervalo de tempo decorrido. Este método pode ser encadeado.

### [method:Number getEffectiveTimeScale]()

Retorna a escala de tempo efetiva (considerando os estados atuais de distorção (warping) e [page:.paused paused]).

### [method:Number getEffectiveWeight]()

Retorna o peso efetivo (considerando os estados atuais de desvanecimento (fading) e [page:.enabled enabled]).

### [method:AnimationClip getClip]()

Retorna o clipe que contém os dados de animação para esta ação.

### [method:AnimationMixer getMixer]()

Retorna o mixer que é responsável por reproduzir esta ação.

### [method:Object3D getRoot]()

Retorna o objeto raiz no qual esta ação é executada.

### [method:this halt]( [param:Number durationInSeconds] )

Desacelera a velocidade desta animação para '0' diminuindo [page:.timeScale timeScale] gradualmente (a partir de seu valor atual), dentro do intervalo de tempo decorrido. Este método pode ser encadeado.

### [method:Boolean isRunning]()

Retorna verdadeiro se a ação [page:.time time] estiver em execução no momento.
Além de ser ativado no mixer (consulte [page:.isScheduled isScheduled]), as seguintes condições devem ser atendidas: [page:.paused paused] é igual a false, [page:.enabled enabled] é igual a true, [page:.timeScale timeScale] é diferente de `0` e não há agendamento para início atrasado ([page:.startAt startAt]).
Nota: `isRunning` sendo true não significa necessariamente que a animação pode realmente ser vista. Este é apenas o caso, se [page:.weight weight] for definido adicionalmente para um valor diferente de zero.

### [method:Boolean isScheduled]()

Retorna verdadeiro, se esta ação estiver ativada no mixer.
Nota: Isso não significa necessariamente que a animação está realmente em execução (compare as condições para [page:.isRunning isRunning]).

### [method:this play]()

Diz ao mixer para ativar a ação. Este método pode ser encadeado.
Nota: A ativação desta ação não significa necessariamente que a animação começará imediatamente: Se a ação já havia terminado antes (chegando ao final de seu último loop), ou se o tempo para um início atrasado foi definido (via [page:.startAt startAt]), um [page:.reset reset] deve ser executado primeiro. Algumas outras configurações ([page:.paused paused]=true, [page:.enabled enabled]=false, [page:.weight weight]=0, [page:.timeScale timeScale]=0) podem também impedir a reprodução da animação.

### [method:this reset]()

Redefine a ação. Este método pode ser encadeado.
Este método define [page:.paused paused] como false, [page:.enabled enabled] como true, [page:.time time] para `0`, interrompe qualquer desvanecimento e distorção programados e remove a contagem de loop e agendamento para início atrasado.
Nota: .`reset` é sempre chamado por [page:.stop stop], mas .`reset` não chama .`stop` em si. Isso significa: Se você quer ambos, resetar e parar, não chame .`reset`; chame .`stop` em vez disso.

### [method:this setDuration]( [param:Number durationInSeconds] )

Define a duração de um único loop desta ação (ajustando [page:.timeScale timeScale] e parando qualquer distorção programada). Este método pode ser encadeado.

### [method:this setEffectiveTimeScale]( [param:Number timeScale] )

Define [page:.timeScale timeScale] e interrompe qualquer distorção (warping) programada. Este método pode ser encadeado.
Se [page:.paused paused] for falso, a escala de tempo efetiva (uma propriedade interna) também será definida com este valor; caso contrário, a escala de tempo efetiva (afetando diretamente a animação neste momento) será definida como '0'.
Nota: .`paused` não será alterado para `true` automaticamente, se .`timeScale` for definido como `0` por este método.

### [method:this setEffectiveWeight]( [param:Number weight] )

Define o [page:.weight weight] e interrompe qualquer desvanecimento (fading) programado. Este método pode ser encadeado.
Se [page:.enabled enabled] for true, o peso (weight) efetivo (uma propriedade interna) também será definido com este valor; caso contrário, o peso efetivo (afetando diretamente a animação neste momento) será definido como '0'.
Nota: .`enabled` não será alterado para `false` automaticamente, se .`weight` for definido como `0` com este método.

### [method:this setLoop]( [param:Number loopMode], [param:Number repetitions] )

Define o [page:.loop loop mode] e o número de [page:.repetitions repetitions]. Este método pode ser encadeado.

### [method:this startAt]( [param:Number startTimeInSeconds] )

Define o tempo para um início atrasado (geralmente passado como [page:AnimationMixer.time] + deltaTimeInSeconds). Este método pode ser encadeado.
Nota: A animação só começará em um dado momento se .`startAt` estiver encadeado com [page:.play play], ou se a ação já foi ativada no mixer (por uma chamada de .`play`, sem parar ou redefini-lo nesse meio tempo).

### [method:this stop]()

Diz ao mixer para desativar esta ação. Este método pode ser encadeado.
A ação será imediatamente interrompida e completamente [page:.reset resetada] (reset).
Nota: Você pode parar todas as ações ativas no mesmo mixer de uma só vez usando [page:AnimationMixer.stopAllAction mixer.stopAllAction].

### [method:this stopFading]()

Interrompe qualquer [page:.fadeIn fading] agendado que seria aplicado a esta ação. Este método pode ser encadeado.

### [method:this stopWarping]()

Interrompe qualquer [page:.warp warp] agendado que seria aplicado a esta ação. Este método pode ser encadeado.

### [method:this syncWith]( [param:AnimationAction otherAction] )

Sincroniza esta ação com a outra ação passada. Este método pode ser encadeado.
A sincronização é feita definindo os valores [page:.time time] e [page:.timeScale timeScale] desta ação aos valores correspondentes da outra ação (parando qualquer distorção (warping) programada).
Nota: Alterações futuras do `time` e do `timeScale` da outra ação não serão detectadas.

### [method:this warp]( [param:Number startTimeScale], [param:Number endTimeScale], [param:Number durationInSeconds] )

Altera a velocidade de reprodução, dentro do intervalo de tempo passado, modificando [page:.timeScale timeScale] gradualmente de `startTimeScale` para `endTimeScale`. Este método pode ser encadeado.

## Eventos

Existem dois eventos que indicam quando um único ciclo da ação ou toda a ação é concluída. Você pode reagir a eles com:

`mixer.addEventListener( 'loop', function( e ) { …} ); // properties of e: type, action and loopDelta mixer.addEventListener( 'finished', function( e ) { …} ); // properties of e: type, action and direction`

## Source

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