Panda3D/Manual/Intervalos
O sistema de intervalos do Panda3D é um mecanismo sofisticado para tocar ações configuradas. Com o uso de intervalor, você pode construir uma rede complexa de animações, efeitos de som, ou qualquer outra ação, e rodar o script em demanda
O núcleo do sistema é a classe intervalo. Ali existem diversos tipos de intervalos, que serão discutidos em detalhes nas próximas páginas, mas todos eles têm em comum a seguinte propriedade: cada intervalo representa uma ação (ou série de ações) que ocorrem em um intervalo de tempo finito e especifico(por isso o nome).
O verdadeiro poder do sistema de intervalo vem das sequencias e paralelos, que são um tipo especial de intervalo que contem intervalos de qualquer tipo ( incluindo sequencias adicionais e/ou paralelos). Ao usar esse grupo de intervalos, voce pode facilmente montar um script complexo dos átomos básicos usando intervalos.
Em qualquer módulo Panda3D que usa intervalos, você precisa primeiro importar o módulo de intervalo:
from direct.interval.IntervalGlobal import *
Existem vários métodos úteis, os quais todos intervalos têm em comum.
Para começar a rodar um intervalo, use um dos seguintes:
interval.start() interval.start(startT, endT, playRate) interval.loop() interval.loop(startT, endT, playRate)
Os três parâmetros são opcionais. Os parametros startTime e endTime definem o subset do intervalo á tocar; esse tempo deve ser dado em segundos, medidos do começo do intervalo. O playRate, como especificado, permite que você rode o intervalo mais rapido ou mais lento que o tempo real; o valor padrão é 1.0, para rodar em tempo real.
Normalmente, um intervalo tocará até o fim e terminará á si mesmo, mas você pode parar a execução do intervalo prematuramente:
interval.finish()
Isso terminará o intervalo e moverá o seu estado para o estado final, como se ele tivesse tocado até o fim. Esse é um ponto muito importante, e ele permite que você defina ações de limpeza críticas dentro do próprio internvalo, que garantidamente foram executadas no momento que o intervalo termina.
Você pode também temporariamente pausar e resumir um intervalo:
interval.pause() interval.resume()
Se você pausar o intervalo e nunca resumir ou terminá-lo, as ações restantes do intervalo não serão executadas.
E você pode pular no tempo dentro deu m intervalo:
interval.setT(time)
Isso faz o intervalo mover-se para o tempo dado, em segundos desde á execução do intervalo. O intervalo executará todas as ações entre seu tempo atual e o tempo novo; não há modo de passar no tempo sem realizar ações de intervenção.
É legal configurar o tempo para um tempo anterior; o intercalo fará o seu melhor para resetar o seu estado para um estado anterior. Em alguns casos isso não pode ser possível( particulamente se uma função intercalo estiver envolvida )
Finalmente, existem vários métodos úteis de questionamento:
interval.getDuration()
Retorna a duração do intervalo em segundos
interval.getT()
Retorna o tempo passado atual do intercalo, desde o começo do intervalo
interval.isPlaying()
Retorna verdadeiro se o intervalo estiver tocando, ou falso se ele não começou, já terminou ou foi explicitamente pausado ou terminado.
interval.isStopped()
retorna verdadeiro se o intervalo não começou, já foi tocado até o fim, ou foi explicitamente parado através de finish(). Isso não é bem o mesmo que interval.isPlaying(), já que ele não retorna verdadeiro para um intervalo pausado.