Devam ediyoruz, şimdi aşağıdaki kodları inceleyelim:
import direct.directbase.DirectStart
from direct.task import Task
import math
environ = loader.loadModel("models/environment")
environ.reparentTo(render)
environ.setScale(0.25,0.25,0.25)
environ.setPos(-8,42,0)
def SpinCameraTask(task):
angledegrees = task.time * 6.0
angleradians = angledegrees * (math.pi / 180.0)
base.camera.setPos(20*math.sin(angleradians),-20.0*math.cos(angleradians),3)
base.camera.setHpr(angledegrees, 0, 0)
return Task.cont
taskMgr.add(SpinCameraTask, "SpinCameraTask")
run()
Yine DirectStart’ı import ettik fakat bu sefer ekstra bir kaç modülü daha kullanmamız gerekti. Geçen sefer eklemiş olduğumuz sahnemizde kamera düzgün değildi burada işi halletmesi için SpinCameraTask isimli bir fonksiyon yazdık. Panda3D’nin görev yöneticisine taskMgr.add komutuyla yazdığımız görevi ekledik. Bu sayede görev yöneticisi SpinCameraTask’ı Task.cont’a döndüğü sürece uygulayacak(Task.done olduğunda bitiriyor, burada kullanmadık). Kamerayı döndürmeye yarayan fonksiyona bakacak olursak Task.time task’ın süresini belirtir biz burada saniyede 6 derece dönmesini istiyoruz. Sonraki satırda dereceden radyanı buluyoruz. setPos ile pozisyonunu belirtip(trigonometri, analitik geometri dediğim burada giriyor x,y,z koordinatları, yerden 3 birim yüksekte oluyor)setHpr ile de dönüşümü ayarlıyoruz(bunlar base.camera ile ilgili şimdilik buraya takılmayın).
Kodu çalıştırdığınızda kameranın artık bozuk olmadığını ve döndüğünü göreceksiniz.