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_

我制作了一个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_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);
}