加载TextureAtlas后,它的fps速率很低一段时间

时间:2013-08-08 23:13:43

标签: android opengl-es textures libgdx frame-rate

stackoverflowers和其他好人, 我有一个问题,经过两天的尝试,我不知道如何解决: 我有libgdx项目(我正在使用阶段和演员,但现在这并不重要)我在评论中添加了一些无用的东西,问题很简单:

  1. 首先设置空屏幕几个(4-5)渲染的增量大约为0.04秒,然后大约为0.01
  2. 设置屏幕,在resize方法中我创建了一个新的TextureAtlas实例 - 它加载两个1024 x 1024纹理需要大约0.5-0.8秒,之后它开始渲染,前几个渲染(5)有三角形时间0.1秒(在SGS II上)或大约0.2-0.3秒(在SG ACE上) - 这是一个非常严重的问题,因为当你有一些FadeIn效果或屏幕开始时的任何动画时你会看到下半场动画 - 是的,当它具有低fps评级......没有任何东西在绘画(我甚至没有看到任何东西,即使它在0.3秒后也被称为渲染)
  3. 我的问题是:TextureAtlas应该在调用时加载每个页面图像,以便它在加载后影响运行?或者至少我是否可以知道它何时会运行,正常绘制?

    非常感谢您的回答!

    显而易见的是这里的代码,但它很简单:

    public class App extends Game {
    
        @Override
            public void create() {      
                Gdx.app.log( this.LOG, "Creating game" );
                fpsLogger = new FPSLogger();
                    setScreen( new IntroScreen(this) );
    
        }
    }
    

    IntroScreen:

    public class IntroScreen implements Screen {
       @Override
        public void resize(
            int width,
            int height )
        {
            super.resize( width, height );
            Gdx.app.log("IntroScreen", "Resize start: " );
            atlas = new TextureAtlas( Gdx.files.internal( "image-atlases/pages-info.atlas" ) );
            Gdx.app.log("IntroScreen", "Resize finished: " );
        }
    
        @Override
        public void render(
            float delta )
        {
            Gdx.gl.glClearColor( 0f, 0f, 0f, 1f );
            Gdx.gl.glClear( GL20.GL_COLOR_BUFFER_BIT );
    
            Gdx.app.log( "IntroScreen", "Delta: " + delta );
    
            // stage is empty
            stage.act( delta );
            stage.draw();
        }
    }
    

    这是LogCat的输出:

    08-09 01:09:53.689: I/IntroScreen(9757): Resize start: 
    08-09 01:09:54.004: I/IntroScreen(9757): Resize finished: 
    08-09 01:09:54.009: I/IntroScreen(9757): Delta: 0.10668343
    08-09 01:09:54.009: I/IntroScreen(9757): Delta: 0.1037551
    08-09 01:09:54.024: I/IntroScreen(9757): Delta: 0.1006427
    08-09 01:09:54.039: I/IntroScreen(9757): Delta: 0.09953054
    08-09 01:09:54.054: I/IntroScreen(9757): Delta: 0.099971004
    08-09 01:09:54.074: I/IntroScreen(9757): Delta: 0.009933725
    08-09 01:09:54.089: I/IntroScreen(9757): Delta: 0.012701442
    08-09 01:09:54.104: I/IntroScreen(9757): Delta: 0.015878525
    08-09 01:09:54.124: I/IntroScreen(9757): Delta: 0.016689042
    08-09 01:09:54.144: I/IntroScreen(9757): Delta: 0.017476525
    08-09 01:09:54.159: I/IntroScreen(9757): Delta: 0.017719833
    08-09 01:09:54.174: I/IntroScreen(9757): Delta: 0.017750284
    08-09 01:09:54.189: I/IntroScreen(9757): Delta: 0.017803017
    ...
    

    感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

在Android上,在最后5帧中对增量时间进行平滑(平均)。如果加载TextureAtlas(或任何其他资源)的过程会使该帧花费更长时间(最有可能),那么您将看到接下来的5个左右帧的更高增量时间。如果您想要未平滑的增量,可以尝试getRawDeltaTime。当然,您必须忽略传递给render方法的delta时间,并在render方法的开头从Gdx.graphics.getRawDeltaTime()获取原始delta。