我只是拿起Android开发来制作游戏。以前接触过它,但只接受了基础知识。我有点困惑如何设置主循环。我已经进入XNA(C#),我喜欢分离的更新/绘制循环。
我想知道一个典型的android游戏循环是如何工作的?我在网上搜索过,遇到过两种方法:
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);
}
}
}
}
让我们将游戏实体的更新作为2种方法的一个例子:
//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是最好的表现吗?
答案 0 :(得分:0)
重要的不是你循环多少次,因为它只关心你做了多少次行动。并且完成的操作量基本相同。因为第二个“for”只为每个entety增加了一个假设的“if”。所以它并不多。
但是它让你能够只做其中一个动作,而不是强迫两个动作。 例如:如果我希望游戏每秒更新60次但只能绘制40 fps,我只能在方法2中执行此操作。这样您可以使用更少的计算来获得更流畅的游戏,但前提是您正确使用它。
如果您的darw和更新以相同的速率发生,那么拆分它们是愚蠢的