файл control.py
Code
# -*- coding: utf_8 -*-
from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import CollisionTraverser,CollisionNode
from pandac.PandaModules import CollisionHandlerQueue,CollisionRay
from pandac.PandaModules import BitMask32
class mPicker():
def __init__(self,_render,_camera):
self.myTraverser = CollisionTraverser()
self.myHandler = CollisionHandlerQueue()
self.pickerNode = CollisionNode('mouseRay')
self.pickerNP = _camera.attachNewNode(self.pickerNode)
self.pickerNode.setFromCollideMask(BitMask32.bit(1))
self.pickerRay = CollisionRay()
self.pickerNode.addSolid(self.pickerRay)
self.myTraverser.addCollider(self.pickerNP, self.myHandler)
self.accept('mouse1',self.pick)
self._render = _render
self._camera = _camera
def pcik(self):
mpos=base.mouseWatcherNode.getMouse()
self.pickerRay.setFromLens(base.camNode, mpos.getX(), mpos.getY())
myTraverser.traverse(self._render)
#assume for simplicity's sake that myHandler is a CollisionHandlerQueue
if self.myHandler.getNumEntries() > 0:
self.myHandler.sortEntries() #this is so we get the closest object
pickedObj=self.myHandler.getEntry(0).getIntoNodePath()
pickedObj=pickedObj.findNetTag('myObjectTag')
if not pickedObj.isEmpty():
handlePickedObject(pickedObj)
pickedObj.setColor(1,0,0)
файл main:
Code
# -*- coding: utf_8 -*-
import direct.directbase.DirectStart
from modules.world import cWorld
from modules.control import mPicker
mp=mPicker(render,camera)
st=loader.loadModel("models/tutor.egg")
st.reparentTo(render)
st.setFromCollideMask(BitMask32.bit(1))
st.setTag('mTag','1')
base.disableMouse()
base.camera.setPos( -40,-40,40)
base.camera.lookAt(st)
run()
во первых, говорит что у класса mPcik нету метода accept... мож я чет не подключил? 0.о пытался из пандас добавить все модули... все равно ругается...
и еще - когда работало с другим кодом, все не работал обычный пик... достал из примера и мне даже луч не рисовался, когда я соответствующую строчку раскоментил...
простите меня все за тупость, но ткните меня наконец носом в ошибку (((
еще раз прошу прощения, что всех достал...