android游戏在快速设备上运行缓慢
我制作了一个android游戏,将此作为主游戏循环:android游戏在快速设备上运行缓慢,android,performance,opengl-es,Android,Performance,Opengl Es,我制作了一个android游戏,将此作为主游戏循环: // desired fps private final static int MAX_FPS = 60; // maximum number of frames to be skipped private final static int MAX_FRAME_SKIPS = 5; // the frame period private final static int FRAME_PERIOD = 1000 / MAX_
// desired fps
private final static int MAX_FPS = 60;
// maximum number of frames to be skipped
private final static int MAX_FRAME_SKIPS = 5;
// the frame period
private final static int FRAME_PERIOD = 1000 / MAX_FPS;
int sleepTime = 0; // ms to sleep (<0 if we're behind)
int framesSkipped; // number of frames being skipped
private float dt = 0;
@Override
public void onDrawFrame(GL10 gl)
{
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT );
dt = game.gTimer.update(false);
doDraw(gl);
doUpdate(20); // <<-- UPDATE (Step = 20units)
sleepTime = (int)(FRAME_PERIOD - dt); // calculate sleep time
if (sleepTime > 0) { // if sleepTime > 0 we're OK
try
{
// send the thread to sleep for a short period
// very useful for battery saving
Thread.sleep(sleepTime);
} catch (InterruptedException e) {}
}
while (sleepTime < 0 && framesSkipped < MAX_FRAME_SKIPS) {
// we need to catch up - update without rendering
doUpdate(20); // <<-- UPDATE (Step = 20units)
// add frame period to check if in next frame
sleepTime += FRAME_PERIOD;
framesSkipped++;
}
gl.glFlush();
}
我在内存中只加载了一个3d对象。wich在doDraw中渲染10次。
我有一个立方体/三维对象的数组列表,用于三维位置和physx跟踪 Sooooo doDraw到底渲染了什么?这是一个最重要的信息,如果你想让我们能够回答为什么这是缓慢的…它渲染约10纹理立方体-在三维。当游戏中只有10个立方体被渲染时,0级的fps会变慢。在更高级别上,多维数据集计数在15~40之间更高。但问题是,即使在0级上,三星s3的fps也只有约40 fps只是不知道为什么。它的速度恒定在每分钟40帧左右。在其他速度较慢的设备上,它的工作速度大于40fps。不要只说它渲染了大约10个纹理立方体,真正重要的部分是如何渲染它们?我已经更新了上面绘制的3d对象。我是否应该尝试删除doUpdate/doDraw方法,看看是否仍然获得40 fps?你有没有经历过类似的行为?我的游戏循环实现的好吗?我重复一遍,发布doDraw方法,这就是你实际调用的方法。
public void render(GL10 gl, int texID)
{
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
//Bind texture in this case
gl.glBindTexture(GL10.GL_TEXTURE_2D, texID);
//Enable the vertex and texture state
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer[0]);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer[0]);
//Draw the vertices as triangles, based on the Index Buffer information
gl.glDrawElements(GL10.GL_TRIANGLES, indexBuffer[0].capacity(), GL10.GL_UNSIGNED_SHORT, indexBuffer[0]);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}