重新打开 LibGdx Android APP 无法正确绘制屏幕

2024-02-18

I have created an android App using the LibGdx framework. Whenever I flash it to my android device it works perfectly. But When I close the app and open it freshly, the App shows the black and white rectangle boxes instead of the image. Could you please assist me in resolving this issue ? enter image description here

Code

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() {
    }
}

尝试将您的纹理管理器设置为空,并将资产管理器设置为空(如果有的话)。总而言之,清除 dispose 中的所有静态变量。

很高兴我帮助了你。 干杯。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新打开 LibGdx Android APP 无法正确绘制屏幕 的相关文章

  • 使用 SkiaSharp 在 Xamarin 中加载 SVG 文件

    从版本 1 55 0 开始 SkiaSharp 支持读取 SVG 文件 该软件包已于几天前发布 2016 年 11 月 10 日 但我找不到足够的有关如何使用它的文档 需要以下包 SkiaSharp 1 55 0 SkiaSharp 视图和
  • 插入耳机时有什么方法可以强制音频通过扬声器吗?

    我已经尝试过推荐的 setSpeakerphoneOn true 以及不推荐的 AudioSystem setForceUse AudioSystem FOR MEDIA AudioSystem FORCE SPEAKER 但两者都不起作用
  • 无需发送消息即可获取 GCM 规范注册 ID

    我在使用 GCM 的应用程序时遇到问题 情况如下 该应用程序已安装 应用程序调用 GCM 注册方法获取注册 ID RID 1 该应用程序已卸载 再次安装该应用程序 应用程序再次调用 GCM 注册方法 获取注册 ID RID 2 在第 5 步
  • 将 Uri 转换为字符串以及将字符串转换为 Uri

    我正在开发一些应用程序 它允许从 SD 卡中选择图像 将其保存到数据库中并为 ImageView 设置该值 我需要知道将 uri 转换为字符串以及将字符串转换为 uri 的方法 现在我使用了 Uri 的 getEncodedPath 方法
  • 设备管理员禁用

    如果不是 则无法卸载设备管理应用程序 禁用 用户可以从设置中禁用 设备管理员 当公司向员工提供 Android 设备时 公司希望 可以控制设备及其状态和策略 但用户可以 轻松摆脱这种控制 有谁知道这怎么可能 防止用户禁用设备管理员 谢谢 无
  • 使用自定义 cordova 插件未找到类异常

    我正在开发一个打印应用程序 它使用自定义 API 通过 USB 访问打印机 因此我需要一个自定义 Cordova 插件 我开始开发它 这是一个非常好的挑战 但目前也非常令人沮丧 因为我不明白为什么我的插件不能正确使用 事情是 1 插件安装正
  • 等待设备时出错:AVD 的模拟器进程 .... 已被终止

    我是Andriod开发的新手 在运行该应用程序时遇到了一个奇怪的问题 如下图所示 我也google了一下 但没有找到有用的答案 谁能告诉我我能做什么 gt 我找到了这个 只需转到这个目录 cd ANDROID HOME Sdk emulat
  • 我在 Android studio 中遇到错误

    在此输入图像描述 https i stack imgur com bvqID png我是安卓新手 我刚刚在 android studio 中创建了一个项目 并且在它的中遇到了问题manifest xml 错误是在 android icon
  • 通过蓝牙将字符串从作为客户端的 PC 发送到作为服务器的移动设备

    我需要通过蓝牙将字符串从 PC 传输到 Android 移动设备的帮助 Android 移动设备应充当服务器并在设备屏幕上显示字符串消息 作为客户端的 PC 应该将字符串发送到移动设备 我希望服务器对提取的字符串 通过蓝牙传输 做出反应 这
  • DrawBitmapMesh 如何在 Android Canvas 中工作

    我想在矩形上绘制位图 我使用以下值 this meshWidth 1 this meshHeight 1 this verts new float 8 this points 0 x float this getWidth 4 this p
  • 发布包含下划线 (_) 的 url

    我发布的 url 参数包含下划线 sample http sdsdsds asasasahjhd com dsdsdsd login json 我这样发布 HttpClient httpclient new DefaultHttpClien
  • 如何在Retrofit(Android)中动态设置标题

    我使用的 API 使用授权方案 需要设置特殊的 X Authorization 标头来验证请求 例如 此 Retrofit 设置非常适合其身份验证令牌为abc123 Headers X Authorization abc123 GET po
  • 无法使用 Firebase 广告:没有静态方法 zzc(Landroid/os/Bundle;

    我正在尝试将 Firebase 广告库添加到我的项目 该项目已经上线 中 构建工作正常 但当我尝试运行时 它崩溃并出现以下错误 11 16 10 33 13 535 540 540 com dap E AndroidRuntime 致命异常
  • 如何让更宽的图像在后台滚动

    就像 LinkedIn 中的前三个屏幕一样 Splash 登录 注册按钮 登录 注册表单 它们都具有相同的背景图像 但是当我们从一个活动移动到另一个活动时 背景图像从右滚动到左侧 我只能尝试overridePendingTransition
  • Eclipse java 断点 - 目的是什么?

    我正在学习 Android 教程 刚刚进入调试部分 我想知道断点的用途是什么 我还不能告诉 它实际上停止了应用程序 以便我可以确定它运行到该点 或者我可以设置多个断点并将它们用作标记来从断点到断点检查 停止和运行 我的代码 断点是执行停止的
  • 加载远程图像

    在 Android 中 最简单的方法是什么 从远程服务器加载图像 将其显示在 ImageView 中 这是我在应用程序中实际使用的方法 我知道它有效 try URL thumb u new URL http www example com
  • 如何禁用 Google 请求许可定期检查手机上已安装的应用程序?

    我正在开发一个 Android 应用程序 因此我不断地在我的测试设备上构建和安装该应用程序 几天以来 我在每次构建 安装时都会提出一个问题 Google 可能会定期检查已安装的应用程序是否存在潜在危害 行为 在 Google 设置 gt 验
  • 解析 onPushOpen 从未被调用

    我已经使用解析实现了推送 将参数添加到清单文件中
  • Android 中的定制数字时钟

    您好 我想以 HH mm AM PM 的格式在我的应用程序中显示时间 数字时钟还包括秒 即 HH mm ss 上午 下午 如何避免显示秒 有没有什么可行的办法 请帮助我 您必须克隆该文件DigitalClock java要在您的应用程序中使
  • 在 Android 上使用 Excel 文件

    我正在开发一个应该能够创建 读取和写入 Excel 文件的模块 是否有 推荐 轻量级 Java 库用于处理可以在 Android 上运行的 Excel 文件 欢迎提出建议 Thanks 找到一个

随机推荐