Я хочу проверить, произошло ли событие ввода внутри тела, в моем случае, внутри круга. Решение, которое I'am играет с использует mousejoint на это, и мой код:как отключить эти строки в mousejoint
public class GameScreen extends AbstractScreen implements InputProcessor {
private OrthographicCamera camera;
private World world;
private Box2DDebugRenderer debugRenderer;
private FPSLogger fps_log;
private MouseJointDef mjd;
private MouseJoint joint;
public GameScreen() {
super();
Gdx.input.setInputProcessor(this);
camera = new OrthographicCamera(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
camera.position.set(Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()/2,0f);
camera.update();
debugRenderer = new Box2DDebugRenderer();
fps_log = new FPSLogger();
world = new World(new Vector2(0,0), false);
for(int i = 0 ; i < 20 ; i++){
Ball ball= new Ball(world);
ball.start();
ball.setTouchable(Touchable.enabled);
}
Wall wall = new Wall(world);
wall.start();
mjd = new MouseJointDef();
mjd.bodyA = world.createBody(new BodyDef());
}
@Override
public void render(float delta) {
super.render(delta);
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
fps_log.log();
debugRenderer.render(world, camera.combined);
world.step(BOX_STEP, BOX_VELOCITY_ITERATIONS, BOX_POSITION_ITERATIONS);
}
private Vector3 tmp = new Vector3();
private QueryCallback query = new QueryCallback() {
@Override
public boolean reportFixture(Fixture fixture) {
if(fixture.testPoint(tmp.x,tmp.y))
mjd.bodyB = fixture.getBody();
joint = (MouseJoint) world.createJoint(mjd);
return false;
}
};
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
camera.unproject(tmp.set(screenX,screenY,0));
world.QueryAABB(query, tmp.x, tmp.y, tmp.x, tmp.y);
return false;
}
}
И это то, что происходит:
Почему? Кстати, этот метод (с помощью mousejoint) лучше всего подходит для достижения того, что я хочу?
Наверное, я должен реализовать метод touchUp для устранения сустава. – niarb