这是我对机器人opengl的第一种方法,我一直用手指移动我的渲染对象。 实际上,一切都有效,但当我试图快速移动物体时,它失去了它的坐标。
我的对象是通过计算6个顶点的坐标而构建的六边形网格。首先,我处理触摸事件并检查地图是否被抓住:
switch(action) {
case MotionEvent.ACTION_DOWN:
mapTouched = hexMapRenderer.isMapTouched(ev);
int pointerIndex = MotionEventCompat.getActionIndex(ev);
downX = MotionEventCompat.getX(ev, pointerIndex);
downY = MotionEventCompat.getY(ev, pointerIndex);
moveX = (int)downX;
moveY = (int)downY;
break;
case MotionEvent.ACTION_MOVE:
if(!hexMapRenderer.isScaling()) {
if(mapTouched) {
hexMapRenderer.setMapMoving(true);
hexMapRenderer.moveMap((int) (moveX - ev.getX()), (int) (moveY - ev.getY()));
moveX = (int) ev.getX();
moveY = (int) ev.getY();
}
}
break;
在我的方法moveMap
中,我计算六边形的位置:
public void moveMap(int shiftX, int shiftY) {
for(int i = 0; i < hexMap.length; i++) {
for (int j = 0; j < hexMap[i].length; j++) {
if(hexMap[i][j] != null && hexMap[i][j].isToDraw()) {
hexMap[i][j].setCenterPoint(new Point(hexMap[i][j].getCenterPoint().x - shiftX, hexMap[i][j].getCenterPoint().y - shiftY));
}
}
}
this.shiftX = shiftX;
this.shiftY = shiftY;
}
在onDrawFrame
方法内,我按照这样的方式移动地图:
if(mapMoving) {
gl.glTranslatef(-shiftX, -shiftY, 0f);
}
正如我所提到的,当我缓慢而轻柔地移动地图时,一切都很有效,但是当事情变得太快时,看起来渲染对象的位置与moveMap方法的计算位置不相等。 你有什么解决方案如何在opengl中实现对象的平滑移动?我已经尝试重新计算位置并重新绘制整个对象但是当地图开始移动时它会闪烁。 提前谢谢。