2014-09-05 92 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... 

这样一来,这些对象的内存将只在一次创建对象分配。

**编辑:我只是看了看,显示方法不应该反复调用,就像我认为它是如此上述可能无法正常工作。