所以我现在忙于为Android设计一种pong游戏。我现在所有的只是球拍和球。播放器(球拍)的控件如下:
实际上上面的2点工作正常,但令我困扰的是,当我用我的右手指握住它,然后释放它并且用左手指快速握住左边时,桨只执行一次“走离开“,然后停下来,而我仍然向左走。 (反之亦然)
我发现如果我用两根手指就会发生这种情况。如果我用我的手指向右按住,并试图快速按下另一侧,它就不会停止并且实际上继续向左移动。
但是使用两根手指很重要,因为这就是玩游戏的方式。
这一切都可能解释不清楚,因此您可以在评论中提出更具体的问题。
Player.java:http://pastebin.com/pdFZJTRB
MyInputProcessor.java:http://pastebin.com/XPzi8JPB
答案 0 :(得分:0)
我认为您的问题在于您在左侧和右侧之间共享touchDown布尔值。如果您足够快地按左侧,则在将右手指的touchDown设置为false之前,左手指的touchDown将设置为true,从而使它们全部为假。尝试这样的事情:
package com.nahrot.teleportball;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.math.Vector2;
public class MyInputProcessor implements InputProcessor
{
public Vector2 leftTouchPos = new Vector2();
public Vector2 rightTouchPos = new Vector2();
public boolean touchLeft = false;
public boolean touchRight = false;
@Override
public boolean keyDown(int keycode)
{
return false;
}
@Override
public boolean keyUp(int keycode)
{
return false;
}
@Override
public boolean keyTyped(char character)
{
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button)
{
if(sideTouched(screenX, true))
{
touchLeft = true;
leftTouchPos.set(screenX, screenY);
}
if(sideTouched(screenX, false))
{
touchRight = true;
rightTouchPos.set(screenX, screenY);
}
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button)
{
if(sideTouched(screenX, true))
{
touchLeft = false;
}
if(sideTouched(screenX, false))
{
touchRight = false;
}
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer)
{
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY)
{
return false;
}
@Override
public boolean scrolled(int amount)
{
return false;
}
private boolean sideTouched(int x, boolean checkLeft)
{
if(checkLeft)
{
if(x <= Gdx.graphics.getWidth() / 2)
return true;
}
else
{
if(x > Gdx.graphics.getWidth() /2)
return true;
}
return false;
}
}
在这里,我将布尔和向量分为左侧和右侧,并提供了一个便利功能,用于检查touchDown或touchUp是否位于屏幕的右侧或左侧,并相应地调整相应的布尔值和向量。我认为无论如何都需要向量来检查哪一侧被按下,所以我怀疑你可以使用它,这样你所需要的就是两个被触摸的布线。顺便说一句,这段代码是未经测试的,但是如果它不起作用你应该知道。