Panda3D/Manual/Animar actors

Já que a classe Actor herda a NodePath, tudo o que pode ser feito a um NodePath, tais como reparentTo() e setPos(), e etc., também pode ser feito em um Actor. Além da funcionalidade básica do NodePath, Actors tem diversos métodos adicionais para controlar animação.

Os princípios para executar uma animaçãoEditar

Animações podem ser executas apenas uma vez ou então diversas vezes em um loop. Quando uma animação é executada, o Actor faz a animação uma vez. Quando uma animação entra em um loop, a animação vai continuar. Por fim, as animações podem ser paradas a qualquer instante. Quando uma animação para, o Actor vai permanecer na posição em que ele parou.

   actor.play('nome da animação')
   actor.loop('nome da animação')
   actor.stop()

Você pode usar o método pose() para fazer um actor permanecer num frame particular da animação. Frames são numerados e iniciam em 0.

   actor.pose('nome da animação', númeroDoFrame)

Este comando não especifica automaticamente o frame inicial da próxima animação. Em vez disso, se você não quer iniciar no primeiro frame, você pode especificar os frames usando parâmetros opcionais fromFrame e toFrame nos métodos play() e loop():

   actor.play('nome da animação', fromFrame = 10)
   actor.loop('nome da animação', fromFrame = 25, toFrame = 36)

Contudo, o método loop tem outro parâmetro opcional chamado restart, que é 1 por padrão, significa que a animação vai reiniciar do começo. Se você passar 0 em vez disso, então a animação vai iniciar o looping apartir do frame atual:

   actor.pose('nome da animação', 30)
   actor.loop('nome da animação', restart = 0, fromFrame = 25, toFrame = 36)

Você pode conseguir mais informações sobre uma animação com estas funções:

   print actor.getNumFrames('nome da animação') # retorna o total de frames na animação
   print actor.getCurrentAnim() # retorna uma string contendo o nome da animação que está sendo executada atualmente
   print actor.getCurrentFrame() # retorna o frame atual da animação

AnimControlEditar

AnimControl é uma classe que fornece controle sobre certas animações.

   meuControle = actor.getAnimControl('nome da animação')

   meuControle.isPlaying() # retorna um valor boolean dizendo se a animação está sendo executada ou não
   meuControle.getFrame() # retorna o número do frame atual
   meuControle # retorna a velocidade da animação, em frames por segundo
   meuControle.getNumFrames() # retorna o total de frames
   meuControle.getPlayRate() # retorna a taxa de execução
   meuControle.loop() # começa a executar a animação em loop
   meuControle.play() # começa a executar a animação
   meuControle.pose( númeroDoFrame ) # posiciona a animação no frame especificado
   meuControle.setPlayRate( númeroDaTaxa ) # configura a taxa de execução
   meuControle.stop() # para a animação

PlayRateEditar

A taxa de execução da animação deve ser configurada para qualquer valor ponto flutuante, que pode ser usado para aumentar ou diminuir a velocidade de uma animação. 1.0 significa que a animação está na sua velocidade normal, enquanto 2.0 executa duas vezes mais rápido, e 0.5 executa na metade da velocidade. Também é possível fazer a animação ir de trás para a frente especificando um valor negativo, por exemplo -1.0.

   actor.setPlayRate( novaTaxaDeExecução, 'nome da animação')