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ção
editarAnimaçõ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
editarAnimControl é 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
PlayRate
editarA 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')