开始后一段时间后旧的Android智能手机上缺少资源

时间:2015-10-06 19:35:25

标签: java android libgdx

我已经创建了简单的LibGDX游戏,LG L90(5.0),索尼Xperia Z1(4.4)和其他一些智能手机上的一切正常,但是当我与HTC WildFire S(2.3.5)进行一些交互后运行我的游戏时游戏画面(每次它发生在游戏的不同地方)一些图片不会画,而当我去屏幕时会再次创建游戏崩溃。 LogCat消息:

  

java.lang.RuntimeException:eglSwapBuffers失败:EGL_BAD_ALLOC       在   android.opengl.GLSurfaceView $ EglHelper.throwEglException(GLSurfaceView.java:1080)       在android.opengl.GLSurfaceView $ EglHelper.swap(GLSurfaceView.java:1038)       在android.opengl.GLSurfaceView $ GLThread.guardedRun(GLSurfaceView.java:1364)       在android.opengl.GLSurfaceView $ GLThread.run(GLSurfaceView.java:1118)

我使用AssetManager加载资源。虽然我在游戏中创建了一些像素图,但不是来自文件,这也是错过的。我不知道该怎么做。我认为可能是垃圾收集器收集因内存丢失而仍在使用的资源,但在Android Studio中我发现我的游戏仅使用5-8 Mb内存。这是一款非常简单的游戏,我不想将其使用限制在更新的智能手机上。

这是我创建一些像素图的类:

public Preview(final int stageNumber, int width, int height) {
        this.stageNumber = stageNumber;

        stages = new Stages(stageNumber);

        /** Draw cell */
        cellWidth = width / stages.template[0].length;
        cellHeight = height / stages.template.length;
        Pixmap cellPixmap = new Pixmap(cellWidth, cellHeight, Format.RGB888);
        cellPixmap.setColor(Color.BLACK);
        cellPixmap.fill();
        cellPixmap.setColor(Color.valueOf("7d7d7d"));
        cellPixmap.drawLine(0, 0, cellPixmap.getWidth(), 0);
        cellPixmap.drawLine(cellPixmap.getWidth(), 0, cellPixmap.getWidth(), cellPixmap.getHeight());
        cellPixmap.drawLine(cellPixmap.getWidth(), cellPixmap.getHeight(), 0, cellPixmap.getHeight());
        cellPixmap.drawLine(0, cellPixmap.getHeight(), 0, 0);
        if ((Gdx.graphics.getPpiX() > 300) && (stages.template[0].length < 13)) {
            cellPixmap.drawLine(1, 1, cellPixmap.getWidth() - 1, 1);
            cellPixmap.drawLine(cellPixmap.getWidth() - 1, 1, cellPixmap.getWidth() - 1, cellPixmap.getHeight() - 1);
            cellPixmap.drawLine(cellPixmap.getWidth() - 1, cellPixmap.getHeight() - 1, 1, cellPixmap.getHeight() - 1);
            cellPixmap.drawLine(1, cellPixmap.getHeight() - 1, 1, 1);
        }
        cellQuad = new Texture(cellPixmap);

        setWidth(cellWidth * stages.template[0].length);
        setHeight(cellHeight * stages.template.length);
        addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                /** Some code */
            }
        });

        Pixmap grayPxmp = new Pixmap((int) getWidth(), (int) getHeight(), Format.RGB888);
        grayPxmp.setColor(Color.valueOf("cecece"));
        grayPxmp.fill();
        grayQuad = new Texture(grayPxmp);
    }

    @Override
    public void draw(Batch batch, float parentAlpha) {
        if (stageChoosed == stageNumber) {
            batch.draw(grayQuad, getX() - 5, getY() - 5, getWidth() + 10, getHeight() + 10);
        }
        for (int i = 0; i < stages.template.length; i++)
            for (int j = 0; j < stages.template[0].length; j++)
                if (stages.template[i][j] != -1)
                    batch.draw(cellQuad, getX() + j * cellWidth,
                            getY() + i * cellHeight, cellWidth, cellHeight);
    }
}

这就是我使用这门课的方式。

    levelsTable = new Table();
    for (int i = 0; i < Stages.count; i++) {
        levelsTable.add(new Preview(i, Gdx.graphics.getWidth() / 3, Gdx.graphics.getWidth() / 3))
                .pad(Gdx.graphics.getWidth() / 15);
        if (i % 2 == 1)
            levelsTable.row();
    }
    stage.addActor(levelsTable);

0 个答案:

没有答案