我想创建一个移动应用程序,允许两个玩家在同一设备上打乒乓球.每个玩家都将抓住设备的一端,并能够在y轴上前后移动守门员.我正在使用带有w / LibGDX的Java开发游戏,但无法获得多个输入才能正常工作.我可以这样做,以便平台记录输入是从左侧还是从右侧输入(确定哪个玩家正在移动),并且我可以使用它来分别移动每个玩家,但是我不能让他们在同时.
这是我目前的运动方式:
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输入的经验非常有限,经过四处搜寻之后,我找不到任何正确的方法来执行此操作.我考虑过对第二个输入进行多线程处理,但这只会使代码混乱,并使逻辑不对称
解决方法:
屏幕上的每一次触摸都给出一个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用作触摸.这样,它将在每种屏幕分辨率下都相同.