android - 将 Libgdx 游戏加载到 Fragment 在 Android 上显示黑屏

标签 android android-fragments libgdx

以下代码显示了我如何将 Libgdx 游戏 (MyGdxGame) 加载到 LinearLayout。在创建游戏时,我设置了一个摄像头并加载了一个小的 wav 声音文件。加载 View 后加载纹理。

问题是在 fragment 过渡到这个 fragment 的过程中,有一个明显的黑色闪光和延迟。是否有可能减少这种情况并改善 fragment 过渡。

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = null;
    Bundle bundle = getArguments();
    if (bundle != null) {
        this.input = bundle.getParcelable(Utils.FRAGMENT_INPUT_KEY);
    } else {
        input = new FragmentInput();
    }

    view = inflater.inflate(R.layout.solve, container, false);
    surface = (LinearLayout) view.findViewById(R.id.puzzleView);

    activity = (MainActivity) getActivity();

    com.badlogic.gdx.graphics.Color color = new com.badlogic.gdx.graphics.Color(Color.red(input.backColor) / 255f,
            Color.green(input.backColor) / 255f,
            Color.blue(input.backColor) / 255f, 1.0f);
    size = input.pieceCount;
    cols = input.columns;
    GameData gdata = new GameData();
    gdata.rows = size / cols;
    gdata.columns = cols;
    gdata.backColor = color;
    gdata.setCategory(input.category);
    if (input.rotated) {
        gameView = new MyGdxGameRotate(this, gdata);
    } else {
        gameView = new MyGdxGame(this, gdata);
    }

    if (surface != null) {
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        View game = initializeForView(gameView, config);
        surface.addView(game);
    }
    return view;
}

最佳答案

onCreateView 在显示 fragment 之前被调用,在这里做繁重的工作意味着您延迟显示该 View (“黑色闪光”),相反,您应该首先将繁重的工作移至 onResume 或至少 onViewCreated

其次,将负载放在后台线程上,以便 UI 线程可以继续处理 fragment 的显示。在 Android 中执行此操作的最简单方法是使用 AsyncTask,它允许您在加载所有内容时轻松通知 UI

public void onViewCreated() {
    new AsyncTask<Void, Void, Void>() {
        public Void doInBackground() {
            //Do your loading
        }

        public void onPostExecute(Void aVoid) {
            //Update display, play sound (on resumed fragment)
        }
    }.execute();
}

如果您是 Android 新手,请小心使用此方法泄漏上下文

关于android - 将 Libgdx 游戏加载到 Fragment 在 Android 上显示黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49104073/

相关文章:

Android 应用程序的 Java 服务器

resize - LibGDX : How can 9patch be used to create a sprite?

android - 在 Libgdx 屏幕中检测 Google Play 登录成功

java - 使用 Scene2D 在 Libgdx 中移动 Sprite (Actor?)

android - 警告数据库已被锁定为 0 :00:10. 000000。确保在事务期间始终使用事务对象进行数据库操作

java - libdgx如何设置TextButton的样式?

android - 在 Android 3.0 中,是否有一种标准方法可以在操作栏项目之间添加分隔符?

java - 最初加载 Fragment 时,将数据从 Activity 传递到 Fragment

java - 在可见 fragment 的 popBackStack 之后调用哪个生命周期方法?

java - 约束布局 beta 4 - fragment 不起作用