[size=150][color=red]Warning: n00bish question coming up…[/size]
Hey,
I’ve been trying some things with collision handling. but it won’t really work.
this is my code:
import direct.directbase.DirectStart
#from pandac.PandaModules import CollisionEntry,CollisionHandler,CollisionHandlerEvent,CollisionTraverser
from pandac.PandaModules import *
from direct.showbase import DirectObject
from direct.task.Task import Task
from direct.interval.IntervalGlobal import *
class World(DirectObject.DirectObject):
def __init__(self):
base.cTrav = CollisionTraverser()
self.collHandEvent=CollisionHandlerQueue()
#self.collHandEvent.addInPattern('%fn-into-%in')
self.accept('arrow_left',self.goLeft)
self.accept('arrow_right',self.goRight)
self.accept('arrow_up',self.goUp)
self.accept('arrow_down',self.goDown)
self.collCount=0
#seeker init
self.seeker = loader.loadModel('seeker.egg')
self.seeker.setScale(40)
self.seeker.reparentTo(render)
sColl=self.initCollisionSphere(self.seeker,True)
sColl[0].setCollideMask(BitMask32.bit(1))
base.cTrav.addCollider(sColl[0],self.collHandEvent)
#gazebo init
self.gazebo = loader.loadModel('gazebo.egg')
self.gazebo.setScale(40)
self.gazebo.setPos(100,100,-100)
self.gazebo.reparentTo(render)
self.gazebo.node().setIntoCollideMask(BitMask32.bit(1))
#self.accept(sColl[1]+'-into-gazebo.egg',self.bounceWall)
taskMgr.add(self.checkCollisions,'checkColl')
def checkCollisions(self,task):
base.cTrav.traverse(render)
for i in range(self.collHandEvent.getNumEntries()):
print "collision!"
entry = self.collHandEvent.getEntry(i)
print entry
return task.cont
def goLeft(self):
self.seeker.setX(self.seeker.getX()-5)
def goRight(self):
self.seeker.setX(self.seeker.getX()+5)
def goUp(self):
self.seeker.setY(self.seeker.getY()+5)
def goDown(self):
self.seeker.setY(self.seeker.getY()-5)
def bounceWall(self,entry):
print "blah"
print entry
def initCollisionSphere( self, obj, show=False):
bounds = obj.getChild(0).getBounds()
center = bounds.getCenter()
radius = bounds.getRadius()*1.0
collSphereStr = 'CollisionHull' +str(self.collCount)+"_"+obj.getName()
self.collCount+=1
cNode=CollisionNode(collSphereStr)
cNode.addSolid(CollisionSphere(center, radius ) )
cNodepath=obj.attachNewNode(cNode)
if show:
cNodepath.show()
return (cNodepath,collSphereStr )
w=World()
run()
it runs fine, the collision sphere of the seeker model shows up, but when I collide it it doesn’t print “collision” at all on the console.
I tried it with CollisionHandlerEvent too, but without any success.
Can somebody help?
PS. we need more collision handling tutorials.