2013-03-18 69 views
1

我一直在製作一個遊戲,其中有負數的對象數爲負數,我已經拿到了數組列表,而我正在向下移動主角。但是當與對象不動的爲time.The代碼一些時間後光滑,他們所得到的抽搐字符的攝像機移動是繼在向下移動相機時出現顛簸的物體

@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(); 

} 

所以,我怎樣才能使物體的運動順暢。

+0

問題是否出現在Android,桌面或兩者上? – 2013-03-18 09:07:16

+0

@RodHyde它們都來了。 – 2013-03-18 09:24:02

回答

2

我相信你的問題的根源是以下行:

camera.position.y += 4; 

而是應該將其更改爲一個較小的值,或更好,使其基於幀速率的速度:

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

這樣你的相機將在y方向上每秒移動4個像素,而不是每個幀4個像素。 (當然,您可能需要增加4才能使速度更快,但它會保持相當平滑。)

0

如果渲染不穩定(使用the builtin FPSLogger找出您獲得的幀率),則在渲染過程中,某些事情會花費更多/不同的時間。你應該使用一個分析器來確定時間在哪裏。 Eclipse中包含的Android DDMS工具非常好。太頻繁的垃圾收集往往是變量運行時的源泉,但最好在試圖解決它之前瞭解正在發生的事情。

也就是說,@ Jyro117建議讓你的狀態更新幀率獨立總是一個好主意。