我正在制作一个游戏,我加速在屏幕上握住两根手指,一只手指放在左半边,一根手指放在显示屏的右半边。 如果你松开手指并放下另一个手指,无论它是什么,我都必须根据手指的位置弯曲车辆。如果你位于右半边(Gdx.grapchis.getWidth / 2),那么我弯向右边......左边。
输入处理器的一部分:
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
if(pointer < 2)
{
CoordinateTouch tmp = new CoordinateTouch();
tmp.x = screenX;
tmp.y = screenY;
coordinates.add(tmp);
}
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
coordinates.clear();
return false;
}
我的坐标数组:
public class CoordinateTouch{
float x;
float y;
}
List<CoordinateTouch> coordinates;
控制渲染方法中的指针(组是我的纹理):
if(coordinates.size() > 1)
{
group.addAction(parallel(moveTo(realDest.x, realDest.y, (float) 15)));
}
else
{
group.addAction(delay((float)1.5));
group.clearActions();
if(Gdx.input.isButtonPressed(0)) {
if (Gdx.input.getX() < Gdx.graphics.getWidth() / 2) {
group.addAction(parallel(rotateBy(velocityRotazionShip, (float) 0.03)));
} else {
group.addAction(parallel(rotateBy(-velocityRotazionShip, (float) 0.03)));
}
}
}
我的问题是,如果我让一根手指检测到它,并且到目前为止这么好,但是如果我只是将手指拉开,我不会更新指针并且没有产生代码组.addAction。
我也试过isButtonPressed和isKeypressed,isTouched(index),但结果是一样的。
对不起英语,我希望已经清楚了。
答案 0 :(得分:1)
如果我理解你,你有3个案例:
如果这个假设是正确的,你只需要boolean
s:
boolean touchLeft, touchRight
在touchDown
内你可以做类似的事情:
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
if (screenX < Gdx.graphics.getWidth()/2)
touchLeft = true;
else
touchRight = true;
}
在touchUp
:
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
if (screenX < Gdx.graphics.getWidth()/2)
touchLeft = false;
else
touchRight = false;
}
现在在render
内你可以说:
if (touchLeft && touchRight)
// move
else if (touchLeft)
// lean left
else if (touchRight)
// leanRight
else
// do nothing or something else
如果您想支持多个手指/侧面,可以将boolean
更改为int
s,并指定手指/侧面的数量。在touchDown
递增它,touchUp
递减它和渲染询问,如果它是&gt; 0