2

私が言いたいことを説明しようと思います。私は2Dゲームを開発しています。以下のコードを小さな画面で実行すると、同じコードを大きな画面で実行するよりも速く動作します。ゲームループの繰り返しに依存していると思いますが、小さな画面よりも大きな画面の方が時間がかかります。ゲームループの繰り返しに依存しないように実装するにはどうすればよいtime unitですか?

private void createDebris(){
    if(dx<=0) return;
    if(stepDebris==2){          
        Debris debris = new Debris(gameActivity, dx-=1280*coefX/77, 800*coefY-50*coefY, coefX, coefY);
        synchronized (necessaryObjects) {
            necessaryObjects.add(debris);
        }
        stepDebris=-1;
        Log.e("COUNT", (count++)+"");
    }
    stepDebris++;
}

PS Debris は、キャンバスに描かれた視覚的なオブジェクトです。あなたの答えに感謝します。ありがとう。

4

3 に答える 3

1

stepDebris が画面上でオブジェクトを移動する単位である場合、ドローコールごとにインクリメントするのは間違っています。これは、移動速度をフレームレートに結び付けるからです。

あなたが欲しいのはこのようなものです

    stepDebris += elapsedMilliseconds * speedFactor

ここで、eplapseMilliseconds は、ゲームが開始されてからの経過時間 (ミリ秒単位) です。stepDebrisの正しいspeedFactorを見つけたら、フレームレートに関係なく、異なるマシン/解像度で同じ速度で移動します。

お役に立てれば!

于 2012-06-06T14:11:41.130 に答える
0

実際の反復を実行するのにかかる時間 (= y) を測定し、その後スリープ状態 (xy) ミリ秒にすることで、「反復」に x ミリ秒かかるようにすることができます。

このチュートリアルのステップ 3も参照してください

于 2012-06-06T14:16:51.317 に答える
0

Android は、計算のタイミングを制御するために、時限イベント ループを実装する Handler API を提供します。 この記事はかなり良いです。

できるだけ速く再描画するのではなく、このインターフェイスでフレーム レート コントローラーを実装することで、バッテリー寿命を節約できます。

于 2012-06-06T14:23:22.350 に答える