我正在向libgdx中的box2d世界添加带有灯具的实体。 我想检测用户是否触摸(点击)了一个对象。 我该怎么做呢?感谢
答案 0 :(得分:7)
你应该使用libgdx Stage来检测Actors上的触摸事件(你在这里将它们称为对象)。最好的做法是将box2d主体映射到舞台演员,这样做很简单。
检测触摸:
实现InputProcessor接口的touchDown方法,以便:
希望有所帮助。
答案 1 :(得分:1)
只有当用户接触到本身所包含的Fixture
部分内容时,才会触摸身体。这意味着,您可以使用Fixture
方法检查Body
的每个testPoit()
:
public class Player {
private Body _body;
public boolean isPointOnPlayer(float x, float y){
for(Fixture fixture : _body.getFixtureList())
if(fixture.testPoint(x, y)) return true;
return false;
}
}
接下来,您需要像这样创建InputAdapter
:
public class PlayerControl extends InputAdapter {
private final Camera _camera;
private final Player _player;
private final Vector3 _touchPosition;
public PlayerControl(Camera camera, Player player) {
_camera = camera;
_player = player;
// create buffer vector to make garbage collector happy
_touchPosition = new Vector3();
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
// don't forget to unproject screen coordinates to game world
_camera.unproject(_touchPosition.set(screenX, screenY, 0F));
if (_player.isPointOnPlayer(_touchPosition.x, _touchPosition.y)) {
// touch on the player body. Do some stuff like player jumping
_player.jump();
return true;
} else
return super.touchDown(screenX, screenY, pointer, button);
}
}
最后一个 - 设置此处理器来监听用户输入:
public class MyGame extends ApplicationAdapter {
@Override
public void create () {
// prepare player and game camera
Gdx.input.setInputProcessor(new PlayerControl(cam, player));
}
详细了解触摸处理here