LibGDX - 翻译相机时屏幕上没有任何变化
LibGDX - Nothing on screen changes when translating camera
我正在使用 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
)。
我是漏掉了什么,还是做错了什么?根据我在 Google.
上找到的所有内容,我认为我做的是正确的
谢谢:)
Stage
class 有不同的构造函数。其中一些构造函数采用 Viewport
,其中包含 Camera
。如果您使用不带 Viewport
的构造函数,Stage
会创建一个带有新 Camera
.
的新 Viewport
在这种情况下,它将使用创建的 Viewport
(和 Camera
)进行所有绘图,除非您通过调用 setViewport
.
切换 Viewport
正如你没有展示的那样,你是如何创建 Stage
我不确定这是否是你的问题所在,但如果这是问题所在,你可以通过使用 Viewport
创建一个 Viewport
来解决它=12=] 并将其传递给 Stage
或通过更改 Viewport
(stage.getViewport().setCamera(myCamera)
) 的 Camera
。
希望对你有帮助。
我正在使用 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
)。
我是漏掉了什么,还是做错了什么?根据我在 Google.
上找到的所有内容,我认为我做的是正确的谢谢:)
Stage
class 有不同的构造函数。其中一些构造函数采用 Viewport
,其中包含 Camera
。如果您使用不带 Viewport
的构造函数,Stage
会创建一个带有新 Camera
.
的新 Viewport
在这种情况下,它将使用创建的 Viewport
(和 Camera
)进行所有绘图,除非您通过调用 setViewport
.
切换 Viewport
正如你没有展示的那样,你是如何创建 Stage
我不确定这是否是你的问题所在,但如果这是问题所在,你可以通过使用 Viewport
创建一个 Viewport
来解决它=12=] 并将其传递给 Stage
或通过更改 Viewport
(stage.getViewport().setCamera(myCamera)
) 的 Camera
。
希望对你有帮助。