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
[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
[editar | editar código-fonte]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
PlayRate
[editar | editar código-fonte]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')