2015-09-07 26 views
4

我做了一個小型的「遊戲」來測試我在實際遊戲中注意到的一些口吃,而且我不能爲我的生活弄清楚爲什麼會發生這種情況。我做了最簡單的項目,我可以測試這一點,但我仍然沉重的口吃。 FPS仍然是60,但是每隔幾秒鐘,有時甚至更多,遊戲就會結束。在最簡單的項目中口吃

我已經在移動設備和高端PC上嘗試過了,奇怪的是,它在PC上更加引人注目,儘管它仍然出現在手機上。

我不能上傳它的視頻,因爲它已經不在錄像中了,所以如果你想測試它,你可以自己編譯這個項目。這裏是代碼:

public class LagTest extends ApplicationAdapter { 
    SpriteBatch batch; 
    Texture dot; 
    float x; 
    float y; 
    float speed; 
    float dotWidth; 
    int screenWidth; 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 
     dot = new Texture("dot.png"); 
     x = 100; 
     y = Gdx.graphics.getHeight()/2 - dot.getHeight()/2; 
     speed = 500; 
     dotWidth = dot.getWidth(); 
     screenWidth = Gdx.graphics.getWidth(); 
    } 

    @Override 
    public void render() { 
     Gdx.gl.glClearColor(0.2f, 0.4f, 0.8f, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     batch.begin(); 
     batch.draw(dot, x, y); 
     batch.end(); 
     if (x < 0) { 
      speed = 500; 
     } 

     if (x > screenWidth - dotWidth) { 
      speed = -500; 
     } 
     x += speed * Gdx.graphics.getDeltaTime(); 
    } 
} 

如果任何人有什麼可能導致這種情況的線索,我都耳朵。

編輯:

所以這裏有好玩的東西。這似乎只發生在窗口模式中,而不是全屏模式。這也可能是它在移動設備上效果更好的原因。也許這是一個錯誤呢?

+0

不確定是否這是造成它,但因爲你沒有使用'batch()'調用後,你應該立即結束它,通常是最好的先更新然後畫(你正在做相反的事) –

+0

啊,當然。這不是造成它的原因,但我仍然會編輯代碼。 – tobloef

+0

您可以打開GC日誌並檢查它是否是GC。 – noone

回答

2

在嘗試了一些不同的方法(平均增量/平均原始增量/使用原始增量/降低幀速率爲30 /使用每幀集合增量)之後,每個方法得到相同的口吃,然後在窗口模式下使用一些口吃口吃:

我想提出口吃不是由LibGDX本身造成的,而是在窗口模式下出現的一個普遍問題,它可能具有許多不同的硬件近因。看到這裏的一個例子和解釋:https://gamedev.stackexchange.com/questions/47356/why-would-a-borderless-full-screen-window-stutter-occasionally