和其他人一样,我很难跟踪libgdx的坐标转换。我正在创建一个类似拼字游戏,并在屏幕上拖动一个手指平底相机。这些瓷砖是Actor在一个Stage上,我在舞台的相机上做相机转换。这一切都很有效。现在我试着给它一个花哨的背景,让瓷砖坐下来。我不太明白如何用抽签方法来使它发挥作用。
//Assets class
static final Texture feltBackground = new Texture(
Gdx.files.internal("felt_background.png"));
feltBackground.setWrap(Texture.TextureWrap.Repeat,
Texture.TextureWrap.Repeat);
//board rendering snippet
private void drawBackground() {
batch.setProjectionMatrix(board.getCamera().combined);
batch.begin();
screenUpperLeft.set(0, 0, 0);
screenLowerRight.set(Gdx.graphics.getWidth(),
Gdx.graphics.getHeight(), 0);
board.getCamera().unproject(screenUpperLeft);
board.getCamera().unproject(screenLowerRight);
batch.draw(Assets.feltBackground,
0, 0,
(int)screenUpperLeft.x, (int)screenUpperLeft.y,
(int)screenLowerRight.x, (int)screenLowerRight.y);
batch.end();
}我在drawBackground中尝试的是:
然而,有了这样的代码,我遇到了各种奇怪的问题,比如背景区域的下界在屏幕外开始移动,摄像机缩放时上边界移动,纹理比手指的移动速度快(虽然背景区域的边界是正确的),y轴平移等等。改变代码会改变这些症状,但是我没有找到一个模式来试图接近正确的方向。画这样的画有什么智慧吗?
编辑:这里有一些屏幕截图,以增加清晰度。
当我打开游戏时,没有背景。

我可以向上拖动,这会移动到背景的上界(如果有一个较低的边界,我就找不到它)

我可以拖动左边的边界,但就像底部一样,我永远找不到正确的边界(如果它存在的话)

发布于 2016-11-29 07:24:57
每当您看到相机和您想要绘制的东西之间出现奇怪的同步问题时,通常都会出现将世界坐标与代码中的视点坐标(反之亦然)混淆的症状。
你用一个SpriteBatch来进行渲染,对吗?当我查找 which you are calling的API时,它说,前两个浮点数是您在世界上呈现精灵的位置,这四个整数与源图像的源和高度有关。
当您传递( 0,0 )作为位置时,它将在您的游戏世界中将图像绘制为0,0,这不是您的视口上的(0,0)。
我建议采用一种更简单的方法--而不是尝试投射或取消坐标,而是将绘制位置(前两个浮标)设置为stage.getCamera().position.x和stage.getCamera().position.y。
https://stackoverflow.com/questions/40851237
复制相似问题