我在修复游戏引擎中的错误时遇到了一些麻烦。
我的问题是,当我在场景中移动相机时,我看到hud的元素在晃动。
仅在通过手指滑动相机移动相机时才会出现错误。
当我在更新方法中更改其位置时,一切似乎都很好。
渲染方法(在主要活动中从onDrawFrame()调用):
public void drawScene(GL10 gl)
{
// Clear scene
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// Move left top corner of camera to specified point
gl.glTranslatef(-camera.getX(), screenManager.getScreenHeight() - camera.getY(), 0f);
// Render all objects from the scene
root.renderObjects(gl);
// Fixed position for HUD elements
gl.glTranslatef(camera.getX(), -screenManager.getScreenHeight() + camera.getY(), 0.0f);
// Render hud to the screen
hud.renderObjects(gl);
// Get back to camera position
gl.glTranslatef(-camera.getX(), screenManager.getScreenHeight() - camera.getY(), 0.0f);
// Reset the matrix
gl.glLoadIdentity();
}
移动方法(在主要活动中从onTouchEvent调用):
public void onPointerMove(TouchPointer pointer, TouchPointer historicalPointer)
{
Point p = new Point(pointer.getRawTouchPoint());
p.subtract(historicalPointer.getRawTouchPoint());
camera.moveBy(p);
}
我认为这是重要的代码。但是我看不到任何可以改变的地方。
如果有人有任何想法,请分享;)
最佳答案
我个人将drawScene更改为
public void drawScene(GL10 gl)
{
// Clear scene
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// Move left top corner of camera to specified point
gl.glTranslatef(-camera.getX(), screenManager.getScreenHeight() - camera.getY(), 0f);
// Render all objects from the scene
root.renderObjects(gl);
// Fixed position for HUD elements
gl.glLoadIdentity();
// Render hud to the screen
hud.renderObjects(gl);
gl.glLoadIdentity();
}
看看是否有帮助。问题可能出在renderObject期间更改相机位置(例如,通过外部线程),甚至浮动不够精确。