public void draw () {
Camera camera = viewport.getCamera();
camera.update();
if (!root.isVisible()) return;
Batch batch = this.batch;
if (batch != null) {
batch.setProjectionMatrix(camera.combined);
batch.begin();
root.draw(batch, 1);
batch.end();
}
if (debug) drawDebug();
}
我感兴趣的是这一行:Batch batch = this.batch;
我的第一个猜测是一些缓存改进。我是对的,还是有其他理由避免直接使用实例变量?
答案 0 :(得分:3)
在Java早期,这是imho sometimes used as an optimization,以避免访问成员变量。但是现在我相信,Hotspot可以比我们人类更好地进行优化。
但是,在此上下文中,它可能用于防止在同时修改该变量时出现问题,因为可能需要在同一实例上调用begin()
和end()
。
答案 1 :(得分:0)
这是一段有趣的代码。
一种可能性是确保批处理方法的每个调用都属于同一个对象。如果其他一些代码在另一个线程上修改this.batch,一个可能的结果是一些方法调用是一个Batch对象的实例,而其余的调用则转到另一个Batch对象的实例。
另一种可能性是,一些程序员从其他语言中继承了想法和样式(在这种情况下,你必须使用标识符,例如" self"来访问当前实例),在这种情况下,他们可能一直试图避免反复输入this.batch。
我不知道有关代码示例的更多信息,我只能猜测。