1

arrayListを取得した負の「y」のオブジェクトが多数あるゲームを作成しており、メインキャラクターを下方向に動かしています.しかし、カメラがキャラクターと一緒に動くと、オブジェクトはスムーズに動きません、彼らは一定の時間間隔の後にジャークを取得しています.そのためのコードは次のとおりです

@Override
public void create() {
    camera = new OrthographicCamera(480, 720);
    camera.position.set(480 / 2, 720 / 2, 0);
    batch = new SpriteBatch();
    int i;

    this.baloonArrList = new ArrayList<Baloon>();

    for (i = 0; i < 3000; i += 300) {
        Baloon baloon = new Baloon(200, i);
        baloonArrList.add(baloon);
        System.out.println(baloon.balloon_y);
    }
    texture1 = new Texture(Gdx.files.internal("data/sheet_final.png"));
    textureRegion1 = new TextureRegion(texture1, 561, 156, 115, 101);
}

@Override
public void render() {

    GLCommon gl = Gdx.gl;
    Gdx.gl.glClearColor(1, 1, 1, 1);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    camera.position.y += 4;
    camera.update();
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    int len = baloonArrList.size();

    for (int i = 0; i < len; i++) {
        batch.draw(textureRegion1, baloonArrList.get(i).balloon_x,
                baloonArrList.get(i).balloon_y, 100, 100);
    }

    batch.end();

}

では、オブジェクトの動きをスムーズにするにはどうすればよいでしょうか。

4

2 に答える 2

2

あなたの問題の原因は次の行だと思います。

camera.position.y += 4;

代わりに、フレームレートの速度に基づいて、より小さな値、またはより良い値に変更する必要があります。

camera.position.y += 4 * Gdx.graphics.getDeltaTime();

このようにして、カメラはフレームごとに4ピクセルではなく、毎秒4ピクセルy方向に移動します。(もちろん、高速化するために4を増やす必要があるかもしれませんが、非常にスムーズに保たれます。)

于 2013-03-18T13:16:14.543 に答える
0

レンダリングがぎくしゃくして一貫性がない場合 (ビルトインを使用しFPSLoggerて取得しているフレームレートを調べます)、レンダリング中に何かがより多くの/可変量の時間を費やしています。プロファイラーを使用して、時間がどこに向かっているかを把握する必要があります。Eclipse に含まれている Android DDMS ツールは非常に優れています。ガベージ コレクションの頻度が高すぎると、ランタイムが変動する原因になることがよくありますが、修正を試みる前に、何が起こっているのかを理解することをお勧めします。

そうは言っても、状態の更新をフレームレートに依存しないようにするという@ Jyro117の提案は常に良い考えです。

于 2013-03-18T15:56:30.543 に答える