我正在尝试制作一个游戏,其中当手指在屏幕上拖动时对象会移动。在主循环中,我根据手指的运动更新对象的位置。
在手机上移动手指一定距离应该移动相同距离的对象。这适用于 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;
}