Panda3D/Manual/Intervalos

Origem: Wikilivros, livros abertos por um mundo aberto.

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.