【问题标题】:How to use multithreading in LibGDX?如何在 LibGDX 中使用多线程?
【发布时间】:2015-07-23 17:00:09
【问题描述】:

我正在用 LibGDX 制作游戏。我有一个 GameScreen(screen) 类,主要游戏发生在其中。我想使用多线程,以便用户可以在屏幕上做他/她自己的事情,而计算机在屏幕上做自己的事情(同时改变屏幕的输出)。我对java中的多线程有很好的了解。但是对于图形我很困惑。任何帮助将不胜感激。在此先感谢。

【问题讨论】:

  • 我认为您需要更具体地了解您想要实现的目标。 libgdx 中的主线程是 GL 线程。您可以派生其他线程在后台执行操作,但其他线程不能执行任何涉及 GL 上下文的操作,例如加载纹理或编译着色器或绘制任何内容。手机游戏很少需要额外的线程,除非你做很多程序性的东西,也许吧。您认为哪种任务需要另一个线程?
  • 目前我在 GL 线程中做所有事情。它是一个纸牌游戏。当用户扔牌时,计算机开始播放。我已经放了一些时间循环来减慢计算机的游戏速度……但是用户不能在那个间隔移动他的牌或做任何事情。在 spritebatch 结束后,我已经在渲染中调用计算机的方法。我想使用一个线程来调用计算机,这样用户就可以在主 GL 线程中做他的事情,而计算机可以在另一个线程中完成它的工作并同时更改屏幕的输出。
  • 啊,好吧,有道理。您基本上需要额外的线程在完成后回调到Gdx.app.postRunnable(),因为它们无法操作 GL 对象(纹理、精灵、ShaderPrograms 等)。此处的文档:github.com/libgdx/libgdx/wiki/Threading
  • 仅仅因为你需要推迟计算机反应而创建新线程是不值得的。您可以在游戏循环中计算时间,并在计数器到达后让计算机完成它的工作,例如。玩家回合结束后 1000 毫秒。 (几个月后发表评论,因为我真的不喜欢@Tenfour04 的“OK,有道理”)
  • @Reloecc 也许我误解了 OP。我认为他们正在执行长时间运行的算法来确定计算机的移动,同时继续运行动画。

标签: android multithreading graphics libgdx


【解决方案1】:

您可以照常使用线程。您唯一需要考虑的是,就像在使用 swing 时只有图形线程可以执行图形操作一样,所以如果您的工作线程需要图形中的任何内容,请使用 libgdx PostRunnable 命令。

【讨论】:

    【解决方案2】:

    有点晚了,但如果可以的话,让我澄清一下。 通常在 LibGDX 上,你必须小心线程。 话虽如此,如果您决定对 html 不感兴趣,您可以正常启动一个线程,当您需要更改 UI 中的某些内容时,您应该使用 Gdx.app.postRunnable() 方法

    有关代码示例和限制,请查看此处https://github.com/libgdx/libgdx/wiki/Threading

    【讨论】:

      【解决方案3】:

      根据页面 https://github.com/libgdx/libgdx/wiki/Threading ,如果您希望创建游戏的 HTML5 版本,那么您将无法使用传统线程:-

      JavaScript 本质上是单线程的。因此,线程是 不可能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 2020-12-28
        • 2021-08-04
        • 2012-05-16
        • 2018-10-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多