Here is my code:
from pandac.PandaModules import CollisionTraverser
ColTraverser= CollisionTraverser('traverser name')
base.cTrav = ColTraverser
from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import BitMask32
from pandac.PandaModules import CollisionHandlerQueue
def __init__(self, id):
self.__model_room= loader.loadModel( 'res/garden.egg' )
#put it in the render tree
self.__model_room.reparentTo( render )
#print 'collisions ', collisions
# Set the collision bit in the IntoCollideMask
collisions.node().setIntoCollideMask( BitMask32.bit(0) )
base.cTrav.addCollider( collisions, self.colhandler )
If i remove the last line it works, if not i get a Runtime Error!
I have Panda3D-1.2.2. compiled on windows with MSVC++ 7.1
Whats the matter?
I found the problem: The model file
Can somone tell me why this file crashes Panda?
In what way does it crash? What is the error message that it reports, and on what line?
It crashes in that line where i add the collsion node to the traverser. .addCollider( ).
This is the error message
I think the collsion node is too big or something
Yes, you’re right–the collision node in question holds 456 CollisionPolygons, and you’re trying to add them all to the collision traverser as a “from” object. So you’re trying to add 456 “from” objects to the collision traverser, and this is overwhelming the system.
Granted, it should have a more graceful error message than this. But the fact is, what you are doing is a mistake anyway.
You are confusing the “into” objects with the “from” objects. Remember, the walls of your garden will be “into” objects–they are static walls of the environment that your “from” objects will test for collisions, but they are not the moving objects themselves. In fact, CollisionPolygons cannot be used as “from” objects anyway.
In order to use your garden walls as “into” objects, you only need to set the bitmask appropriately. It is not necessary to add the “into” objects to the collision traverser–that makes them “from” objects. So if you remove the addCollider() line, you should be fine.
Of course, you do still have 456 CollisionPolygons in one group, which is quite a few. Runtime performance may be poor. You might consider simplifying your geometry for the purposes of detecting collisions, or at least subdividing it into several different groups based on proximity, for instance, one for each of the four corners of the quad.
Thanks David. You are the best g
I think now i understand collsiondection with Panda.