在我的libgdx
应用中,我有一个renderer
:
@Override
public void render() {
if (mUpdate) {
update();
}
.
.
.
}
update
调用更改了一个数组,该数组保存render
中后续调用中使用的对象。
我的应用禁用了create
中的连续渲染:
Gdx.graphics.setContinuousRendering(false);
每次我希望触发update
调用时,都从UI线程(由用户操作触发)中设置mUpdate = true
并请求呈现:
public void invalidate(boolean update) {
mUpdate = update;
Gdx.graphics.requestRendering();
}
现在问题是,invalidate(false)
可能会在非用户操作之间隐式调用mUpdate = false
,这反过来又可能会设置update
。这导致requestRendering
永远不会被调用(但是我们将有2 x AtomicInteger
)。
这里最好的解决方案是什么?我是否应该有一个update
计数器,以确保在我的render
通话中总是调用public void invalidate(boolean update) {
if (update) {
mUpdateCounter.getAndIncrement();
}
Gdx.graphics.requestRendering();
}
?
@Override
public void render() {
if (mUpdateCounter.get() > 0) {
update();
mUpdateCounter.getAndDecrement();
}
.
.
.
}
然后
mUpdate
或者是否有可能在每个renderer
调用中传递实例信息(public class Test1 extends AppCompatActivity {
ListView listView;
String[] fruitNames = {"Apple","Orange","Kiwi","Passion","Banana"};
int[] fruitImages = {R.drawable.ic_chevron_right,R.drawable.ic_chevron_right,R.drawable.ic_chevron_right,R.drawable.ic_chevron_right,R.drawable.ic_chevron_right};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test1);
)。
答案 0 :(得分:1)
您可以直接通过invalidate(boolean)
方法调用更新:
if (update)
update();
如果需要渲染线程,可以使用Gdx.app.postRunnable()
:
if (update) {
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
update();
}
});
}