I post my code:
cs = new CollisionSphere(0,0,0,0.5);
cs2 = new CollisionSphere(0,0,0,5);
cs3 = new CollisionSphere(0,0,0,0.5);
//creo un nodo collisione dove mettere la sfera
sferaDiCollisione= new CollisionNode(“Sphere”);
sferaDiCollisione->add_solid(cs);
sferaDiCollisione2= new CollisionNode(“Sphere”);
sferaDiCollisione2->add_solid(cs2);
//creo un nodo scena che è attaccato al nodo Attore e lo visualizzo
collAttore = Attore.attach_new_node(sferaDiCollisione);
//NodePath collCamera = camera.attach_new_node(sferaDiCollisione3);
NodePath collAmbiente = environ.attach_new_node(sferaDiCollisione2);
collAttore.show();
collAmbiente.show();
queue = new CollisionHandlerQueue();
traverser.add_collider(collAttore,queue);
// Per cliccare su un oggetto 3d
Attore.set_tag(“myObjectTag”, “1”);
environ.set_tag(“myObjectTag”, “2”);
myTraverser = new CollisionTraverser(“ctraverser”);
pickerNode = new CollisionNode(“mouseRay”);
pickerNP = camera.attach_new_node (pickerNode);
pickerNode->set_into_collide_mask(GeomNode::get_default_collide_mask());
mouseWatcher = (MouseWatcher*)window->get_mouse().node();
//mpWorldManager->GameWindow()->get_mouse().node();
pickerRay = new CollisionRay(camera.get_x(), camera.get_y(), camera.get_z(),0,1,0);
pickerNode->add_solid(pickerRay);
myHandler = new CollisionHandlerQueue();
myTraverser->add_collider(pickerNP, myHandler);
framework.define_key(“mouse1”, “click”, MouseEvent, (void*) NULL);
with mouse event:
void MouseEvent(const Event *pTheEvent, void *pData) {
/*if(myHandler->get_num_entries()==1)
{
cout<<"prova di collisione"<<endl;
}*/
if (!mouseWatcher->has_mouse()){
// The mouse is probably outside the screen.
return;
}
// This gives up the screen coordinates of the mouse.
LPoint2f mpos = mouseWatcher->get_mouse();
// This makes the ray’s origin the camera and makes the ray point
// to the screen coordinates of the mouse.
cout<set_from_lens(window->get_camera(0), mpos.get_x(), mpos.get_y())<<endl;
}
I where click click I get always 1.
Unlike the manual I replaced
pickerNode->set_from_collide_mask(GeomNode::get_default_collide_mask());
with
pickerNode->set_into_collide_mask(GeomNode::get_default_collide_mask());
why I suggested it at run time