【发布时间】:2015-04-18 11:06:01
【问题描述】:
我在加载屏幕中使用了非连续渲染,因此当我在辅助线程中初始化代码的不同部分时,我可以对其进行更新。这样我就可以手动增加我用来绘制 Sprite 的 Animation 计数器,该 Sprite 显示一个填充沙漏,与我的资产加载一致。
所以,我在另一个线程(图集、纹理、初始化变量等)的帮助下加载了我的游戏屏幕:
Runnable load_game_screen = new Runnable(){
public void run(){
new_game_screen.load_all();
}
}};
Thread thread_load_game = new Thread(load_game_screen);
thread_load_game.start();
在我的游戏屏幕 load_all 函数中,我使用 Gdx.app.postRunnable 在主 UI 线程的下一次渲染中运行这些初始化,所以我没有得到任何上下文错误:
public void load_all(){
Gdx.app.postRunnable(new Runnable(){
@Override
public void run(){
...load stuff
loading_screen.loading_counter += 0.025f;
loading_screen.loadingTimerSprite.setRegion(loading_screen.animation.getKeyFrame(loading_screen.loading_counter, true));
}
Gdx.graphics.requestRendering();
Thread.sleep(25);
Gdx.app.postRunnable(new Runnable(){
@Override
public void run(){
...load stuff part2
loading_screen.loading_counter += 0.025f;
loading_screen.loadingTimerSprite.setRegion(loading_screen.animation.getKeyFrame(loading_screen.loading_counter, true));
}
Gdx.graphics.requestRendering();
Thread.sleep(25);
... etc ...
}
问题在于 requestRendering 不会立即采取行动,有时 postRunnables 会一个接一个地运行,而不会立即进入主 UI 渲染功能,因此用户可以'看不到加载精灵的完整动画;它发生在跳跃中。如何从代表主线程加载资产和变量的辅助线程强制在主 UI 线程中进行渲染?
【问题讨论】:
标签: java android android-activity libgdx