【发布时间】: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