【问题标题】:android touch input bug安卓触摸输入错误
【发布时间】:2013-05-28 08:16:51
【问题描述】:

我正在尝试制作一个游戏,其中当手指在屏幕上拖动时对象会移动。在主循环中,我根据手指的运动更新对象的位置。

在手机上将手指移动一定距离应将对象移动相同的距离。这适用于 Nexus 7,但在 Droid X(姜饼)上,对象的移动速度不如手指快。例如,如果我将手指一直拖过屏幕,则对象仅移动该距离的一半。运动也感觉不可预测(有时它移动得更远,有时它只移动一点)。这是什么原因造成的?

我正在使用 libgdx。在主循环中,我将 dx 和 dy 添加到对象的 x 和 y。

这里是触摸事件(我将屏幕上的所有手指存储在一个数组中,并且只访问第一个手指)。 sp 是一个临时向量。

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    for (int i = 0; i < MAX_TOUCHPOINTS; i++) {
        if (touchIDs[i] == -1) {
            touchIDs[i] = pointer;
            if (i == 0) {
                sp.x = screenX;
                sp.y = screenY;
                camera.unproject(sp);
                prevX = sp.x;
                prevY = sp.y;
            }
            break;
        }
    }
    return true;
}

@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
    int location = -1;
    for (int i = 0; i < MAX_TOUCHPOINTS; i++) {
        if (touchIDs[i] == pointer) {
            location = i;
            break;
        }
    }
    if (location == -1)
        return false;
    for (int i = location; i < MAX_TOUCHPOINTS - 1; i++) {
        touchIDs[i] = touchIDs[i + 1];
    }
    touchIDs[MAX_TOUCHPOINTS - 1] = -1;
    if (touchIDs[0] != -1) {
        sp.x = Gdx.input.getX(touchIDs[0]);
        sp.y = Gdx.input.getY(touchIDs[0]);
        camera.unproject(sp);
        prevX = sp.x;
        prevY = sp.y;
    }
    return true;
}

@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
    if (pointer == touchIDs[0]) {
        sp.x = screenX;
        sp.y = screenY;
        camera.unproject(sp);
        dx = sp.x - prevX;
        dy = sp.y - prevY;
        prevX = sp.x;
        prevY = sp.y;
        return true;
    }
    return false;
}

【问题讨论】:

    标签: java android touch libgdx


    【解决方案1】:

    我在浏览您的代码时遇到了一些麻烦,但是我有一些东西可能对您有用,因为我曾经构建了一个触摸滚动系统。

    Libgdx 已经有一个用于跟踪触摸移动的内置函数。

    Gdx.input.getDeltaX() gdx.input.getDeltaY()

    这些函数将产生一个表示距离变化的值。因此,您可以简单地将这个值添加到您用来存储您希望滚动的位置的值中。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 2018-07-13
      • 2014-07-08
      • 1970-01-01
      相关资源
      最近更新 更多