Saltar para o conteúdo

Panda3D/Manual/Animar actors

Origem: Wikilivros, livros abertos por um mundo aberto.

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ção

[editar | editar código-fonte]

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

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

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')