我只是拿起android开发来制作游戏。以前接触过,但只学习了基础知识。我有点困惑如何设置主循环。我已经进入 XNA (C#) 并且我喜欢分离的更新/绘制循环。
我想知道典型的 android gameloop 是如何工作的?我在网上搜索并遇到了两种方法:
public void run() {
while (running) {
//Method 1: update is called here
view.update();
Canvas c = null;
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
//Method 2: update is called inside view.onDraw
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
}
}
让我们以游戏实体的更新为例来说明这两种方法:
//METHOD1
public void onDraw(Canvas canvas)
{
for (GameEntity entity : entities)
{
entity.update();
entity.draw(canvas);
}
}
//END METHOD 1
//METHOD 2
public void update()
{
for (GameEntity entity : entities)
{
entity.update();
}
}
public void draw(Canvas canvas)
{
for (GameEntity entity : entities)
{
entity.draw(canvas);
}
}
//END METHOD 2
现在我对线程没有任何经验,所以我不知道 XNA 如何在 xna 的屏幕后面进行更新/绘制循环。但是使用方法 1,我将不得不循环遍历所有实体两次,一次用于更新,另一次用于单独绘图。恐怕这会影响性能,但我已经在网上的示例中看到了这一点。
我错过了什么还是我是对的,方法 2 是最好的表现吗?