我正在尝试制作一个简单的2D游戏。我注意到onDrawFrame()函数在带有vsync的60 FPS中调用。然而,由于某些原因,如果渲染时间超过1毫秒,旧设备会出现某些原因,它会每隔几帧跳过一帧,动画看起来并不平滑。我说的是不太旧的设备...
90%的绘图代码如下所示:
gl.glBindTexture(GL11.GL_TEXTURE_2D, MainProgram.glSurfaceView.renderer.ResourceIdToTexture(R.drawable.tank));
gl.glFrontFace(GL11.GL_CW);
gl.glVertexPointer(3, GL11.GL_FLOAT, 0, vertexBuffer);
gl.glTexCoordPointer(2, GL11.GL_FLOAT, 0, tankTextureBuffer);
float[] glCoords = World.WorldCoordsToGLCoords(tank.GetPosition().PosX(), tank.GetPosition().PosY());
float[] glDims = {0.025f, 0.025f};
gl.glPushMatrix();
gl.glTranslatef(glCoords[0], glCoords[1]+glDims[1], -1.0f);
gl.glScalef(glDims[0], glDims[1], 1.0f);
float[] tc = tank.GetOwner().GetColor().asFloatArray();
gl.glColor4f(tc[0],tc[1],tc[2],tc[3]);
gl.glDrawArrays(GL11.GL_TRIANGLE_STRIP, 0, vertex.length / 3);
gl.glColor4f(1f, 1f, 1f, 1f);
gl.glPopMatrix();
然而,将所有图纸处理到屏幕需要1毫秒,我注意到FPS(我已经测量了每秒调用surfaceView.drawFrame的计时器数量)从60下降到30左右它看起来几乎令人作呕。 即使在最老的设备上,其他游戏如何拥有如此流畅的动画? 我如何用GLES11实现这个目标?