PDA

View Full Version : Detecting collision with on-the-fly object


Notch
09-01-2014, 03:31 PM
I have generated on-the-fly cylinders using vizshape.addCylinder(). I would like to detect collisions with a specific cylinder.

I am able to detect collisions with objects using viz.callback(viz.COLLISION_EVENT,onCollision). I can get the name of the object collided with by using the following code:

def onCollision(info):
print('Collided with object',info.object)

Although this returns something like "Collided with object viz.VizPrimitive(9)", but I have way knowing what 'VizPrimitive(9)' is. I have several objects in the scene, and ideally would like to add names to the objects at the time they are created, so that I can then work out what I'm colliding with later on.

How do I name on-the-fly objects, and how do I then get the name of the object when a collision occurs?

Jeff
09-08-2014, 02:51 PM
You can check to see if info.object matches the name assigned to the cylinder:

import viz
import vizshape
viz.go()

viz.collision(viz.ON)

dojo = viz.addChild('dojo.osgb')
cylinder = vizshape.addCylinder(pos=[0,1.8,4])

def onCollision(info):

if info.object == cylinder:
print 'Collided with cylinder'

viz.callback(viz.COLLISION_EVENT,onCollision)

Notch
09-09-2014, 04:41 AM
Thanks very much. It looks like what I hadn't appreciated is that it is not possible to explicitly name objects (with a string), but instead I needed to follow the handle to the object.

Got it all working now :)