我已经创建了简单的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);