2014-09-05 40 views
1

所以我想實現滾動使用this tutorial作爲一個起點。在Libgdx的階段滾動似乎laggy

我正在桌面上運行測試。

我在舞臺上增加了一個ActionGestureListener,所以我可以稱之爲pan(...) function。它有效,但當我嘗試滾動時,它看起來非常滯後,有點像「振動」。

我錯過了什麼?

這是我到目前爲止有:

public class Store extends ScreenAdapter { 


    SpriteBatch spritebatch; 
    Stage stage; 
    Texture texture; 
    Image image; 
    Group background, foreground; 


    @Override 
    public void show() { 
     spritebatch = new SpriteBatch(); 
     stage = new Stage(); 
     background = new Group(); 
     foreground = new Group(); 
     texture = new Texture("badlogic.jpg"); 
     image = new Image(texture); 

     //Building background/foreground. 
     background.addActor(image); 

     //Adding to stage. 
     stage.addActor(background); 
     stage.addActor(foreground); 

     stage.addListener(new ActorGestureListener() { 
      // TODO Auto-generated method stub 

      @Override 
       public void pan(InputEvent event, float x, float y, float deltaX, float deltaY) { 

       stage.getCamera().translate(-deltaX, -deltaY, 0); 
       stage.getCamera().update(); 
       //System.out.println(x + ", " + y + ", " + "  " + deltaX + ", " + deltaY); 
      } 
     }); 
     Gdx.input.setInputProcessor(stage); 
    } 


    @Override 
    public void render(float delta){ 

     Gdx.gl.glClearColor(1, 1, 1, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     spritebatch.setProjectionMatrix(stage.getCamera().combined); 

     spritebatch.begin(); 
     stage.draw(); 
     spritebatch.end(); 
    } 

    @Override 
    public void resize(int width, int height){ 
     System.out.println("resize() executed."); 
     //stage.getViewport().update(width, height, true); 
    } 


    @Override 
    public void dispose(){ 
     stage.dispose(); 
     texture.dispose(); 
     spritebatch.dispose(); 
    } 
} 

回答

0

我終於擺脫了「振動」編輯translate調用。

stage.getCamera()。translate(-deltaX/2,-deltaY/2,0);

而不是被2除,它可能是3或任何你想要的增量。我覺得這個解決方案更像是在某個問題上提供創可貼,而不是真正解決問題。但它有一些可行的東西,所以我會隨它去做。

0

你不應該在你的節目你的方法字段爲對象重新分配內存。這會讓垃圾收集器變得瘋狂,並且可能會導致您看到的一些延遲。將所有新語句從節目()入類的構造函數,或直接到外地的成員如下:

public class Store extends ScreenAdapter { 


SpriteBatch spritebatch = new SpriteBatch(); 
Stage stage = new Stage(); 
// ETC... 

這樣一來,這些對象的內存將只在一次創建對象分配。

**編輯:我只是看了看,顯示方法不應該反覆調用,就像我認爲它是如此上述可能無法正常工作。