Panda3D/Manual/Usar intervals para mover o Panda
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.