libGdx多点触摸问题

libGdx多点触摸问题,libgdx,multi-touch,Libgdx,Multi Touch,我已经完成了我的个人电脑版本和libgdx游戏的测试,在个人电脑上看起来还不错,但当我在两部android手机(三星Galaxy S3 mini和三星Galaxy S2)上运行它时,我遇到了一些问题,这是我没有预料到的。基本上,在我的1v1播放器版本中,每个播放器都有自己的左右触摸控制。玩家的速度是恒定的(速度向量的长度是恒定的),但每当玩家触摸任何控件时,速度向量的方向都会改变。我的代码如下所示: private void handleInput(float delta) { if (

我已经完成了我的个人电脑版本和libgdx游戏的测试,在个人电脑上看起来还不错,但当我在两部android手机(三星Galaxy S3 mini和三星Galaxy S2)上运行它时,我遇到了一些问题,这是我没有预料到的。基本上,在我的1v1播放器版本中,每个播放器都有自己的左右触摸控制。玩家的速度是恒定的(速度向量的长度是恒定的),但每当玩家触摸任何控件时,速度向量的方向都会改变。我的代码如下所示:

private void handleInput(float delta) {
    if (Gdx.input.isTouched()) {
        for (int i = 0; i < 20; i++) {

            if (Gdx.input.isTouched(i)) {

                touchedX = Gdx.input.getX(i);
                touchedY = Gdx.input.getY(i);
                // PLAYER 1
                if (touchedX <= dB) {
                    // RED RIGHT
                    if (touchedY <= h / 2 + h / playerSpacing + dB
                            && touchedY >= h / 2 + h / playerSpacing) {
                        turnLeft(players[0], delta);
                    }
                    // RED LEFT
                    else if (touchedY <= h / 2 - h / playerSpacing
                            && touchedY >= h / 2 - h / playerSpacing - dB) {
                        turnRight(players[0], delta);
                    }

                }
                //PLAYER 2
                else if (touchedX >= w - dB) {
                    // BLUE RIGHT 
                    if (touchedY <= h / 2 + h / playerSpacing + dB
                            && touchedY >= h / 2 + h / playerSpacing)  {
                        turnRight(players[1], delta);
                    }
                    // BLUE LEFT
                    else if (touchedY <= h / 2 - h / playerSpacing
                            && touchedY >= h / 2 - h / playerSpacing - dB) {
                        turnLeft(players[1], delta);
                    }
                }

            }
        }
    }
private void handleInput(浮点增量){
if(Gdx.input.isTouched()){
对于(int i=0;i<20;i++){
if(Gdx.input.isTouched(i)){
touchedX=Gdx.input.getX(i);
touchedY=Gdx.input.getY(i);
//玩家1
如果(触摸X=w-dB){
//蓝权
如果(触控Y=h/2+h/播放机间距){
右转(玩家[1],三角洲);
}
//蓝左
否则如果(touchedY=h/2-h/playerSpacing-dB){
左转(玩家[1],三角洲);
}
}
}
}
}

它只是在实际的android设备上工作不好,触摸没有被流畅地识别,玩家的完全控制权受到了损害。你知道为什么会发生这种情况吗?LibGdx的多点触摸支持不好,或者我做错了什么?

问题是你没有取消触摸点

您必须按如下方式取消投影接触点:

touchpoint = new Vector3();

camera.unproject(touchpoint.set(Gdx.input.getX(i),Gdx.input.getY(i),0);
touchedX = touchpoint.x;
touchedY = touchpoint.y;

另外,我建议您使用inputprocessor,而不是从函数Gdx.input.getX(i)、Gdx.input.getY(i)获取X&Y值由于Inputprocesor为您提供了对多点触控事件的更多控制,您不必编写获取触控点的循环,因此它在功能上也为您提供了触控指针

谢谢您的回答,但问题仍然存在,因为我的游戏没有使用投影矩阵。更好地描述问题。如果我按左键,则在按住它的同时,按向右键,然后再按向左键,它不起作用。这是我的错误吗?请尝试删除函数的第一行(if(Gdx.input.isTouched()),因为默认情况下这一行表示Gdx.input.isTouched(0)…只需运行循环并检查iStocked的所有索引就行了,上次的评论实际上救了我很多!!我为我的问题的愚蠢感到抱歉,但我从来没有想到过这一点。