我有一个游戏循环,不断被调用以更新游戏。在该循环内部是以下代码:
mySurfaceView.post(new Runnable() {
public void run() {
myView.setTranslationX(myCam.getX());
myView.setTranslationY(myCam.getY());
}
});
我被告知要把新的"我的游戏循环中的关键字通常不是一个好主意,因为内存不断被分配给新对象。然而,这是一个匿名的内部阶级,所以我不确定这里是否适用。这段代码会导致性能问题吗?如果是这样,那么我将如何解决它们呢?我使用这段代码让我的屏幕在他移动时围绕我的播放器。
答案 0 :(得分:1)
一种方法是在UI线程上向Handler发送消息,而不是发布Runnable。如果您的翻译X / Y值是整数,这是最简单的。
例如,请参阅"记录GL应用程序"中使用ActivityHandler的方式。 Grafika中的活动。 UI线程创建一个新的Handler并将其传递给渲染器线程,该线程向其发送消息。 handleUpdateFps()
是一个很好的例子,因为它将一对整数传递给UI线程。
如果您不能将值作为定点传递,则必须通过Object传递它们,事情开始变得复杂。总的来说,这种方法比简单发布Runnable更为复杂。
(一种更好的方法是在内部调整你的坐标,有一个概念"世界空间"对比"屏幕空间",而不是弄乱视图?但是看看你的其他问题,你尝试了这种方法并且没有成功。)