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.