Щас ваще не понятно!!! Пытаюсь вывести инфу по координате z, точки пересечения луча с Levelом, и все время вижу одно и то же ругательство: self.textNode.setText(text)
AttributeError: 'libpanda.PandaNode' object has no attribute 'setText'
Последний вариант кода через глобальные переменные (Синим-мои изменения):
import direct.directbase.DirectStart
from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.DirectGui import *
import sys
gz=0
class DevInfo(DirectObject):
def __init__(self):
self.textObj=OnscreenText(text='0', style=1, fg=(1,1,1,1),
pos=(1.3,-0.95), align=TextNode.ARight, scale = .07)
taskMgr.add(self.updateInfo, 'info-task')
def updateInfo(self,task):
global gz
self.textObj.setText(str(gz))
return task.cont
class FPS(object):
........
........
def jumpUpdate(self,task):
global gz
""" this task simulates gravity and makes the player jump """
# get the highest Z from the down casting ray
highestZ = -100
for i in range(self.nodeGroundHandler.getNumEntries()):
entry = self.nodeGroundHandler.getEntry(i)
z = entry.getSurfacePoint(render).getZ()
gz=z
if z > highestZ and entry.getIntoNode().getName() == "Cube":
highestZ = z
# gravity effects and jumps
self.node.setZ(self.node.getZ()+self.jump*globalClock.getDt())
self.jump -= 6*globalClock.getDt()
if highestZ > self.node.getZ()-.6:
self.jump = 0
self.node.setZ(highestZ+.6)
if self.readyToJump:
self.jump = 1
return task.cont
FPS()
DevInfo()
run()
Добавлено (14.02.2009, 08:05)
---------------------------------------------
Все. Дошло, все работает. Надо использовать textNode, а не OnscreenText
Добавлено (14.02.2009, 10:18)
---------------------------------------------
А как сделать, чтоб player не парил в воздухе, при движении вперед/назад, когда он не на "земле" стоит
Добавлено (14.02.2009, 10:31)
---------------------------------------------
И вот, после того как я вывел нужную мне информацию таким от образом:
def jumpUpdate(self,task):
""" this task simulates gravity and makes the player jump """
# get the highest Z from the down casting ray
highestZ = -100
for i in range(self.nodeGroundHandler.getNumEntries()):
entry = self.nodeGroundHandler.getEntry(i)
z = entry.getSurfacePoint(render).getZ()
self.devInfo.setText('nodeZ='+str(self.node.getZ())+' z='+str(z))
if z > highestZ and entry.getIntoNode().getName() == "Cube":
highestZ = z
self.devInfo1.setText('hz='+str(highestZ)+' '+str(entry))
# gravity effects and jumps
self.node.setZ(self.node.getZ()+self.jump*globalClock.getDt())
self.jump -= 6*globalClock.getDt()
if highestZ > self.node.getZ()-0.6:
self.jump = 0
self.node.setZ(highestZ+0.6)
if self.readyToJump:
self.jump = 1
return task.cont
я ума не приложу, каким образом z может отличаться от highestZ