我想创建一个移动应用程序,允许两个玩家在同一台设备上玩乒乓球。每个玩家将抓住设备的一端,并能够在y轴上来回移动守门员。我正在使用Java w / LibGDX开发游戏,但我无法获得多个输入。我可以这样做,以便平台注册输入进入左侧或右侧(确定哪个玩家正在移动)我可以使用它来单独移动每个玩家,但我不能让他们这样做同时。
这就是我目前设置动作的方式:
PlayerPaddle playerOnePaddle = ((GameScreen) currentScreen).getPlayerOnePaddle();
PlayerPaddle playerTwoPaddle = ((GameScreen) currentScreen).getPlayerTwoPaddle();
Vector2 touchPos = new Vector2(Gdx.input.getX(), Gdx.input.getY() + playerOnePaddle.height / 2);
if (Gdx.input.getX() < Gdx.graphics.getWidth() / 2)
{
playerOnePaddle.pos.y = Gdx.graphics.getHeight() - touchPos.y;
}
if (Gdx.input.getX() > Gdx.graphics.getWidth() / 2)
{
playerTwoPaddle.pos.y = Gdx.graphics.getHeight() - touchPos.y;
}
这适用于个人输入,这意味着我可以点击屏幕左侧并移动左侧播放器,我可以点击屏幕右侧并移动右侧播放器,但我不能同时移动每个播放器时间,这将打败游戏的重点。我需要有关如何实现这一点的具体示例,因为我对LibGDX输入的体验非常有限,并且在搜索之后我无法找到任何正确的方法来执行此操作。我想过多线程第二个输入,但这会让代码变得混乱并使逻辑不对称
答案 0 :(得分:3)
对于屏幕中的每次触摸,都会给出 int指针。第一次触摸将获得指针0,第二次触摸将获得指针1.如果你触摸,指针被释放,它将被给予下一次触摸(它将始终采用第一个空闲指针)。我建议你检查前5个指针,确保:
for (int i=0; i<5; i++){
if (!Gdx.input.isTouched(i)) continue;
Vector2 touchPos = new Vector2(Gdx.input.getX(i), Gdx.input.getY(i) + playerOnePaddle.height / 2);
if (Gdx.input.getX(i) < Gdx.graphics.getWidth() / 2){
playerOnePaddle.pos.y = Gdx.graphics.getHeight() - touchPos.y;
}
if (Gdx.input.getX(i) > Gdx.graphics.getWidth() / 2){
playerTwoPaddle.pos.y = Gdx.graphics.getHeight() - touchPos.y;
}
}
不过,你应该使用相机并取消投影:
camera.unproject(touchPos.set(Gdx.input.getX(i), Gdx.input.getY(i), 0));
使用touchPos.x
和touchPos.y
作为您的触摸。这样,它在每个屏幕分辨率下的工作方式都相同。