与其他人一样,我在跟踪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
尝试的是:
然而,对于像这样的代码,我有各种奇怪的问题,例如从屏幕外开始的背景区域的下边界,当相机被缩放时上边界移动,纹理平移比我的手指更快' s运动(虽然背景区域的边界正确平移),y轴平移镜像等。更改代码会改变这些症状,但我还没有找到一种模式来试图接近正确。有这样画的智慧的话吗?
编辑: 以下是一些增加清晰度的屏幕截图。
当我打开游戏时,没有背景。
我可以向上拖动,向上移动到背景的上边界(如果有一个较低的边界,我就找不到它)
我可以向右拖动左边界,但是像底部一样,我找不到右边界(如果存在)
答案 0 :(得分:1)
每当您发现相机与您尝试绘制的内容之间存在奇怪的同步问题时,通常会出现代码中某处混淆世界坐标与视点坐标(或反之亦然)的症状。 / p>
您正在使用SpriteBatch进行渲染,对吗?当我查找the version of SpriteBatch#draw()
which you are calling的API时,它表示前两个浮点数是你在世界中渲染精灵的位置,而四个整数与源的和高度有关。源图像。
当您将(0,0)作为位置传递时,它会在您的视口中将图像绘制在游戏世界的0,0处,而不是(0,0)。
我建议采用更简单的方法 - 而不是尝试投影或取消投影坐标,将绘制位置(前两个浮点数)设置为stage.getCamera().position.x
和stage.getCamera().position.y
。