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