2

libGDX の学習を始めたばかりで、http: //steigert.blogspot.in/2012/02/2-libgdx-tutorial-game-screens.html (libGdx ヘルプ ページの 2 番目のリンク) の例に従っていました。

今のところ、512x512 のロゴのみを表示しています。アプリケーションでは他に何も起きていませんが、アプリケーションをデスクトップ モードで実行すると、15 ~ 16 の FPS が得られます。画像を削除すると、空白の画面で 60 fps になります。Android の場合はさらに悪いことに、Galaxy SL - GT-i9003 で 3 ~ 4 fps を取得します (Temple Run はデバイスで再生可能な速度で実行されます)。

私のラップトップは World of Warcraft を問題なく高品質で再生できるので、このような小さなアプリが 15 fps しか達成できないことに困惑しています。

public class SplashScreen extends AbstractScreen {
    private Texture splashTexture;
    private TextureRegion splashTextureRegion;

    public SplashScreen(MyGDXGame game){
        super(game);
    }

    @Override
    public void show()
    {
        super.show();

        // load the splash image and create the texture region
        splashTexture = new Texture("splash.png");

        // we set the linear texture filter to improve the stretching
        splashTexture.setFilter( TextureFilter.Linear, TextureFilter.Linear );

        // in the image atlas, our splash image begins at (0,0) at the
        // upper-left corner and has a dimension of 512x301
        splashTextureRegion = new TextureRegion( splashTexture, 0, 0, 512, 382 );
    }

    @Override
    public void render(float delta ) {
        super.render( delta );

        // we use the SpriteBatch to draw 2D textures (it is defined in our base
        // class: AbstractScreen)
        batch.begin();

        // we tell the batch to draw the region starting at (0,0) of the
        // lower-left corner with the size of the screen
        batch.draw( splashTextureRegion, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight() );

        // the end method does the drawing
        batch.end();
    }

    @Override
    public void dispose()
    {
        super.dispose();
        splashTexture.dispose();
    }

}

AbstractScreen クラスの関連セクションは次のとおりです。

    public class AbstractScreen implements Screen {


    protected final MyGDXGame game;
    protected final BitmapFont font;
    protected final SpriteBatch batch;

    public AbstractScreen(MyGDXGame game ){
        this.game = game;
        this.font = new BitmapFont();
        this.batch = new SpriteBatch();
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor( 0f, 0f, 0f, 1f );
        Gdx.gl.glClear( GL20.GL_COLOR_BUFFER_BIT );
    }
...
}

そしてデスクトップアプリ:

public class Main {
public static void main(String[] args) {
    LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();

    cfg.title = "First Game";
    cfg.useGL20 = false;
    cfg.width = 800;
    cfg.height = 480;

    new LwjglApplication(new MyGDXGame(), cfg);
}

MyGDXGame は次のとおりです。

public class MyGDXGame extends Game {
private FPSLogger fpsLogger;

public SplashScreen getSplashScreen() {
    return new SplashScreen( this );
}


@Override
public void create() {
    fpsLogger = new FPSLogger();
}

@Override
public void dispose() {
    super.dispose();
}

@Override
public void render() {
    super.render();
    setScreen(getSplashScreen());
    fpsLogger.log();
}

@Override
public void resize(int width, int height) {
    super.resize(width, height);
}

@Override
public void pause() {
    super.pause();
}

@Override
public void resume() {
    super.resume();
}

私は libGdx について非常に多くの良いことを読んだので、この問題は私には困惑しているようです. このような低いフレームレートを取得するために何が間違っていますか?

4

1 に答える 1

3

setScreen(getSplashScreen());あなたのrender()方法に問題があると思います。create()の方法に移しMyGDXGameます。

現在、フレームごとに画面を切り替えて、SpriteBatch毎回非常に重いオブジェクトを再作成しています (質問に対する私のコメントを参照してください)。

于 2013-11-05T11:21:53.957 に答える