像其他人一样,我在遵循libgdx的坐标转换方面遇到问题。我正在创建一个类似拼字游戏的游戏,并且在屏幕上拖动手指可以平移相机。瓷砖是Actor
s在Stage
,我正在舞台相机上进行相机转换。这一切都有效。现在我正试图给它一个花砖背景,让它可以坐在上面。我不能完全弄清楚它的绘制方法。libGDX重复背景纹理绘制困难
//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
是:
- 组边界点到屏幕边界
- unproject这些点到世界空间中找到纹理的区域,我应该吸取
- 将该区域绘制到屏幕原点
但是,使用这样的代码我有各种奇怪的问题,如背景区域的下边界开始离屏,相机放大时上边界移动,纹理平移快于我的手指移动(尽管背景区域的边界正确平移),y轴平移镜像等。更改代码会改变这些症状,但我还没有找到一种模式来尝试更接近正确。任何这样画画的智慧语言?
编辑: 以下是一些截图,以增加清晰度。
当我打开游戏时,没有背景。
我可以将起来,这向上移动背景的上限(如果有下边界,我永远不能找到它)
我可以向右拖动左边界,但像底部一样,我找不到右边界(如果存在)