Saltar para o conteúdo

Panda3D/Manual/Usar intervals para mover o Panda

Origem: Wikilivros, livros abertos por um mundo aberto.

O próximo passo é fazer o panda realmente mover-se para frente e para trás. Atualize o seu código com as linhas seguintes:

   import direct.directbase.DirectStart
   from pandac.PandaModules import *

   from direct.task import Task
   from direct.actor import Actor
   from direct.interval.IntervalGlobal import *
   import math

   #Carrega nosso primeiro modelo
   ambiente = loader.loadModel("models/environment")
   ambiente.reparentTo(render)
   ambiente.setScale(0.25, 0.25, 0.25)
   ambiente.setPos(-8,42,0)
 
   #Tarefa para mover a camera
   def TarefaGiraCamera(task):
     anguloGraus = task.time * 6.0
     anguloRadianos = anguloGraus * (math.pi / 180.0)
     base.camera.setPos(20*math.sin(anguloRadianos), -20.0*math.cos(anguloRadianos),3)
     base.camera.setHpr(anguloGraus, 0, 0)
 
     return Task.cont
 
   taskMgr.add(TarefaGiraCamera, "GiraCamera")

   #Carrega o panda Actor, e faz um loop na animação
   pandaActor = Actor.Actor("models/panda-model", {"andar":"models/panda-walk4"})
   pandaActor.setScale(0.005, 0.005, 0.005)
   pandaActor.reparentTo(render)
   pandaActor.loop("andar")
 
   #Cria os quatro Lerp Interval para mover o panda para a frente e para trás
   pandaPosInterval1= pandaActor.posInterval(13,Point3(0,-10,0), startPos=Point3(0,10,0))
   pandaPosInterval2= pandaActor.posInterval(13,Point3(0,10,0), startPos=Point3(0,-10,0))
   pandaHprInterval1= pandaActor.hprInterval(3,Point3(180,0,0), startHpr=Point3(0,0,0))
   pandaHprInterval2= pandaActor.hprInterval(3,Point3(0,0,0), startHpr=Point3(180,0,0))

   #Cria e inicia a sequência de Intervals
   pandaPasso = Sequence(pandaPosInterval1, pandaHprInterval1,
     pandaPosInterval2, pandaHprInterval2, name = "PassoDePanda")

   pandaPasso.loop()

   run()


Intervals são tasks que mudam uma propriedade de um valor para outro dentro de um período de tempo especificado. Por exemplo, considere o pandaPosInterval1 acima. Quando aquele interval é iniciado, ele vai gradualmente ajustando a posição do panda de (0,10,0) para (0,-10,0) dentro de um período de 13 segundos. Similarmente, quando pandaPosInterval é iniciado, a orientação do panda rotacionará 180º em um período de 3 segundos.

Sequences são tasks que executam um interval atrás do outro. A sequência pandaPasso acima faz com que o panda se mova em linha reta, gire e volte pela mesma linha para repetir todo o processo de novo. O código pandaPasso.loop() faz com que a Sequence seja iniciado no modo looping.


O resultado de tudo isso é que o panda anda para frente e para trás de uma árvore á outra.