我使用LibGdx框架创建了一个Android应用程序。每当我将它闪存到我的Android设备时它都能完美运行。但是,当我关闭应用程序并将其打开时,应用程序会显示黑白矩形框而不是图像。你能帮我解决一下这个问题吗?
代码
package com.mygdx.game;
import java.util.ArrayList;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.graphics.GL30;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeFontParameter;
import com.badlogic.gdx.math.Vector3;
public class CatchEggs implements ApplicationListener {
public static final int SCREEN_HEIGHT = 800;
public static final int SCREEN_WIDTH = 480;
public static final float FRAME_SPEED = .1f;
public static int shortWastedCount,eggCatchedCount;
private int score;
private String yourScoreName;
BitmapFont yourBitmapFontName;
public static ArrayList<Texture> TextureArray = new ArrayList<Texture>();
private OrthographicCamera camera;
private SpriteBatch batch;
private AnimatedSprite basket;
private EggLayManager EggLayManager;
private Music gameMusic;
private Hen hen1,hen2,hen3;
private CollisionManager collisionManager;
private boolean isGameOver = false;
@Override
public void create() {
//Texture.setEnforcePotImages(false);
camera = new OrthographicCamera();
camera.setToOrtho(false, SCREEN_WIDTH, SCREEN_HEIGHT);
batch = new SpriteBatch();
Sprite basketSprite = new Sprite(TextureManager.BASKET_TEXTURE);
basket = new AnimatedSprite(basketSprite,FRAME_SPEED,1,1);
basket.setPosition(SCREEN_WIDTH / 2, 0);
EggLayManager = new EggLayManager(TextureManager.EGG_TEXTURE);
TextureArray.add(TextureManager.GREEN_EGG_TEXTURE);
TextureArray.add(TextureManager.PINK_EGG_TEXTURE);
TextureArray.add(TextureManager.GOLDEN_EGG_TEXTURE);
TextureArray.add(TextureManager.EGG_TEXTURE);
hen1 = new Hen(TextureManager.HEN_TEXTURE, EggLayManager,0,SCREEN_WIDTH/3);
hen2 = new Hen(TextureManager.HEN_TEXTURE, EggLayManager,SCREEN_WIDTH/3,2*SCREEN_WIDTH/3);
hen3 = new Hen(TextureManager.HEN_TEXTURE, EggLayManager,2*SCREEN_WIDTH/3,SCREEN_WIDTH);
collisionManager = new CollisionManager(basket,EggLayManager);
gameMusic = Gdx.audio.newMusic(Gdx.files.internal("data/game-music.mp3"));
gameMusic.setVolume(.25f);
gameMusic.setLooping(true);
gameMusic.play();
score = 0;
yourScoreName = "score: 0";
yourBitmapFontName = new BitmapFont();
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("data/font.ttf"));
FreeTypeFontParameter parameter = new FreeTypeFontParameter();
parameter.size = 27;
yourBitmapFontName = generator.generateFont(parameter); // font size 12 pixels
generator.dispose();
}
@Override
public void dispose() {
batch.dispose();
gameMusic.dispose();
yourBitmapFontName.dispose();
gameMusic.dispose();
yourBitmapFontName.dispose();
TextureManager.BACKGROUND.dispose();
TextureManager.BASKET_TEXTURE.dispose();
TextureManager.GAME_OVER.dispose();
TextureManager.EGG_TEXTURE.dispose();
TextureManager.EGG_BREAK_TEXTURE.dispose();
TextureManager.HEN_TEXTURE.dispose();
TextureManager.SCORE_BOARD_BOUNDARY.dispose();
TextureManager.GOLDEN_EGG_TEXTURE.dispose();
TextureManager.PINK_EGG_TEXTURE.dispose();
TextureManager.GREEN_EGG_TEXTURE.dispose();
TextureArray.clear();
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(TextureManager.BACKGROUND,0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
showImage(TextureManager.SCORE_BOARD_BOUNDARY,SCREEN_WIDTH / 2 - TextureManager.SCORE_BOARD_BOUNDARY.getWidth() / 2,
SCREEN_HEIGHT - TextureManager.SCORE_BOARD_BOUNDARY.getHeight());
hen1.draw(batch);
hen2.draw(batch);
hen3.draw(batch);
EggLayManager.draw(batch);
basket.draw(batch);
showScore();
showGameOver();
batch.end();
handleInput();
if(!isGameOver) {
basket.move();
hen1.update();
hen2.update();
hen3.update();
EggLayManager.update();
collisionManager.handleCollisions();
}
if(basket.isCaught()) {
isGameOver = false;
}else{
isGameOver = true;
}
}
private void showGameOver() {
if(shortWastedCount>=21) isGameOver = true;
if(isGameOver){
showImage(TextureManager.GAME_OVER,SCREEN_WIDTH / 2 - TextureManager.GAME_OVER.getWidth() / 2, SCREEN_HEIGHT / 2 - TextureManager.GAME_OVER.getHeight() / 2);
}
}
private void showImage(Texture t,int x, int y) {
batch.draw(t, x, y);
}
private void showScore() {
showImage(TextureManager.EGG_TEXTURE, 39 - TextureManager.EGG_TEXTURE.getWidth()/2 , 750);
showImage(TextureManager.EGG_BREAK_TEXTURE, 39 - TextureManager.EGG_BREAK_TEXTURE.getWidth()/2 , 700);
yourScoreName = " " + eggCatchedCount;
yourBitmapFontName.setColor(1.0f, 1.0f, 1.0f, 1.0f);
yourBitmapFontName.draw(batch, yourScoreName, 72, 777);
yourScoreName = " " + shortWastedCount;
yourBitmapFontName.setColor(1.0f, 1.0f, 1.0f, 1.0f);
yourBitmapFontName.draw(batch, yourScoreName, 72, 725);
}
private void handleInput() {
if(Gdx.input.isTouched()) {
if(isGameOver) {
basket.setCaught(true);
isGameOver = false;
shortWastedCount=eggCatchedCount=0;
}
Vector3 touchPosition = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
camera.unproject(touchPosition);
if(touchPosition.x > basket.getX()) {
basket.moveRight(touchPosition);
}
else{
basket.moveLeft(touchPosition);
}
}
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
答案 0 :(得分:0)
尝试将TextureManager设置为null和资源管理器(如果其中有一个)。总而言之,清除处理中的所有静态变量。
很高兴我帮助了你。 欢呼声。