所以我尝试使用this tutorial作为起点来实现滚动。
我在桌面上运行测试。
我在舞台上添加了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 :(得分:0)
您不应该在show方法中为字段对象重新分配内存。这将使垃圾收集器疯狂,并可能导致一些像你一样的滞后。将所有新语句从show()移动到类构造函数中,或直接移动到字段成员上,如下所示:
public class Store extends ScreenAdapter {
SpriteBatch spritebatch = new SpriteBatch();
Stage stage = new Stage();
// ETC...
这样,这些对象的内存只会在创建对象时分配一次。
**编辑:我只是看了一下,看到show方法不应该被反复调用,就像我认为的那样,以上可能不起作用。
答案 1 :(得分:0)
我终于摆脱了"振动"通过编辑translate
电话。
stage.getCamera()。translate(-deltaX / 2,-deltaY / 2,0);
而不是除以2,它可以是3或任何你想要的增量。我觉得这个解决方案更像是在一个问题上设置一个创可贴,而不是真正解决问题。但是它看起来很有效,所以我会继续使用它。