私はちょうどゲームを作るためにアンドロイドの開発をピックアップしています。これまでに触れたが、基本を取り上げただけだった。私は少しメインループを設定する方法が混乱しています。私はXNA(C#)に入っていて、私は分離された更新/描画ループが大好きです。Androidのgameloop、更新と描画が別々かどうか?
私は典型的なアンドロイドのガミュロップがどのように機能するのだろうかと思っていましたか?私はオンラインで検索し、2つの方法に出くわしました:
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を使用すると、更新のために1回、別々の描画のために1回、すべてのエンティティを2回ループする必要があります。私はこれがパフォーマンスを殺すのではないかと恐れていますが、私はこのサンプルをオンラインで見ています。
私は何か不足していますか、私は正しいですか?方法2は最高のパフォーマンスを賢明ですか?