我正在使用GestureListener尝试创建一个平移菜单,但即使相机的坐标正在更改并且它正在更新,也没有任何动作。我想这可能是因为舞台是相对于相机绘制的,但我不确定如何改变它。
我是如何做到的:
camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
...
gesture = new GestureDetector(this);
InputMultiplexer im = new InputMultiplexer();
im.addProcessor(gesture);
im.addProcessor(stage);
Gdx.input.setInputProcessor(im);
} //end initialization of CustomizeScreen
public void render(float delta) {
Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1);
Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);
stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 60f)); //0, 18, 31 for layer style
stage.draw();
Table.drawDebug(stage);
batch.setProjectionMatrix(camera.combined);
g.batch.begin();
g.font.setScale(2);
g.font.setColor(Color.WHITE);
g.font.draw(g.batch, "Coins: " + Filer.getCoins(), 15, Gdx.graphics.getHeight() - 15);
g.font.draw(g.batch, message, 0, 150);
g.batch.end();
camera.update();
}
...
@Override
public boolean pan(float x, float y, float deltaX, float deltaY) {
message = "Pan, delta:" + Float.toString(deltaX) +
"," + Float.toString(deltaY);
camera.translate(deltaX, 0, 0);
camera.update();
return false;
}
我已经在更新方法中检查了相机坐标(camera.position.x
),所以我知道它实际上正在改变某些东西。但我的所有按钮都保持不变。它们位于屏幕宽度的三分之一处(Gdx.graphics.getWidth() / 3
)。
我错过了什么,或做错了吗?我认为我根据我在谷歌上找到的所有内容正确地做到了这一点。
谢谢:)
答案 0 :(得分:1)
Stage
类有不同的构造函数。其中一些构造函数采用Viewport
,其中包含Camera
。如果您使用没有Viewport
的构造函数,Stage
会使用新的Viewport
创建新的Camera
。
在这种情况下,除非您通过调用Viewport
切换Camera
,否则它将使用创建的Viewport
(和setViewport
)来绘制所有图片。
由于您没有显示,如何创建Stage
我不确定您的情况是否是问题,但如果这是问题,您可以通过创建Viewport
来解决问题您的Camera
并将其传递给Stage
或更改Camera
(Viewport
)的stage.getViewport().setCamera(myCamera)
。
希望它有所帮助。