jPCT-AE - a 3d engine for Android > Support

Some questions about CollisionEvent

(1/1)

kiffa:

--- Code: ---CollisionEvent event;
int[] ids = event.getPolygonIDs();
Object3D[] objs = event.getTargets();

--- End code ---

When objs.length > 1, how to judge which PolygonID(ids[j]) belongs to which Object3D(objs[j])? For example, to calc:


--- Code: ---SimpleVector normal = objs[i].getPolygonManager().getTransformedNormal(ids[i]);

--- End code ---

EgonOlsen:
The getTargets()-methods was a late addition for some purpose that i don't know anymore. Maybe somebody requested that. It has not direct relation to the getPolygonIds()-method. That method returned the affected polygons for the object that actually received this event if it's of type target. What this means is, that if you assign a listener to some object and that object is the target of a collision, then you'll get the polygon ids for that object in the ids-array. If you want that for multiple targets, you have to assign the listener to multiple objects.

kiffa:

--- Code: ---class MyListener implements CollisionListener{

  @Override
  public void collision(CollisionEvent event) {
    int[] ids = event.getPolygonIDs();
    Object3D[] objs = event.getTargets();
  }

  @Override
  public boolean requiresPolygonIDs() {
    // TODO Auto-generated method stub
    return true;
  }
}

//Assume a car collide with 2 walls;
public void test(){

     MyListener listener = new MyListener();
   
    Object3D wall_1;
    wall_1.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);
   
    Object3D wall_2;
    wall_2.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);
   
    Object3D car;
    car.setCollisionMode(Object3D.COLLISION_CHECK_SELF);
   
    wall_1.addCollisionListener(listener);
    wall_2.addCollisionListener(listener);
    car.checkForCollisionEllipsoid(translation, ellipsoid, recursionDepth);
  }
 

--- End code ---
When the car collides with both of wall_1 and wall_2 at the same time, the objs = event.getTargets() will contain wall_1 and wall_2, and the ids = event.getPolygonIDs() will contain some polygonIDs of wall_1 and some polygonIDs of wall_2, right?

If that's correct, how could i judge which polygonIDs belongs to wall_1?(and which belongs to wall_2)

Or should i assign 2 different listeners to 2 walls?

EgonOlsen:

--- Quote from: kiffa on November 07, 2013, 12:31:34 pm ---When the car collides with both of wall_1 and wall_2 at the same time, the objs = event.getTargets() will contain wall_1 and wall_2, and the ids = event.getPolygonIDs() will contain some polygonIDs of wall_1 and some polygonIDs of wall_2, right?

--- End quote ---
No, wrong. That's what i tried to say with

--- Quote ---It has not direct relation to the getPolygonIds()-method.
--- End quote ---
You have to attach the listener to both walls and you'll get the corresponding ids from both listener calls. The getTargets()-method was a late addition to the listener interface that somebody requested. Even if the event is of type source, you'll get all targets by calling that method but not a single polygon id.

kiffa:
I'm clear, Thanks!

Navigation

[0] Message Index

Go to full version