1

以下のように2本の指でボックスを制御したい:

ここに画像の説明を入力

私は基本的MouseJoint implementationです:

public class MyMouseJoint{

OrthographicCamera cam; 
World world;

Body groundBody ;   
public MouseJoint mouseJoint = null;    
Body hitBody = null;    
Vector2 target = new Vector2(); 
Vector3 testPoint = new Vector3();

QueryCallback callback = new QueryCallback() {
    @Override
    public boolean reportFixture (Fixture fixture) {
        // if the hit fixture's body is the ground body we ignore it            
        if (fixture.getBody() == groundBody) return true;

        // if the hit point is inside the fixture of the body
        // we report it
        if (fixture.testPoint(testPoint.x, testPoint.y)) {
            hitBody = fixture.getBody();
            return false;
        } else
            return true;
    }
};

public MyMouseJoint(OrthographicCamera cam, World world, Body groundBody){
    this.cam=cam;
    this.world=world;
    this.groundBody = groundBody;  
}

    //USE THIS FUNCTION IN touchDown
public void createMouseJoint(float x, float y){
    // translate the mouse coordinates to world coordinates
            testPoint.set(x, y, 0);
            cam.unproject(testPoint);

            // ask the world which bodies are within the given
            // bounding box around the mouse pointer
            hitBody = null;
            world.QueryAABB(callback, testPoint.x - 0.1f, testPoint.y - 0.1f, testPoint.x + 0.1f, testPoint.y + 0.1f);

            if (hitBody != null) {
                MouseJointDef def = new MouseJointDef();
                def.bodyA = groundBody;
                def.bodyB = hitBody;
                def.collideConnected = true;
                def.target.set(testPoint.x, testPoint.y);
                def.maxForce = 10000.0f * hitBody.getMass();
                def.frequencyHz=100;
                def.dampingRatio=0;

                mouseJoint = (MouseJoint)world.createJoint(def);
                hitBody.setAwake(true);
            }

}

    //USE THIS FUNCTION IN touchDragged
public void dragMouseJoint(float x, float y){
    if (mouseJoint != null) {
        cam.unproject(testPoint.set(x, y, 0));
        mouseJoint.setTarget(target.set(testPoint.x, testPoint.y));
    }
}

    //USE THIS FUNCTION IN touchUp
public void releaseMouseJoint(){
    if (mouseJoint != null) {
        world.destroyJoint(mouseJoint);
        mouseJoint = null;
    }
}
}

2本の指を使用するためにこのクラスを変更するにはどうすればよいですか?

4

1 に答える 1