libGDX重复背景纹理绘制困难

时间:2016-11-28 18:39:05

标签: libgdx

与其他人一样,我在跟踪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尝试的是:

  1. 将边界点设置为屏幕边界
  2. 将这些点取消投影到世界空间中以找到我应该绘制的纹理区域
  3. 将该区域绘制到屏幕原点
  4. 然而,对于像这样的代码,我有各种奇怪的问题,例如从屏幕外开始的背景区域的下边界,当相机被缩放时上边界移动,纹理平移比我的手指更快' s运动(虽然背景区域的边界正确平移),y轴平移镜像等。更改代码会改变这些症状,但我还没有找到一种模式来试图接近正确。有这样画的智慧的话吗?

    编辑: 以下是一些增加清晰度的屏幕截图。

    当我打开游戏时,没有背景。

    first opened

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

    enter image description here

    我可以向右拖动左边界,但是像底部一样,我找不到右边界(如果存在)

    enter image description here

1 个答案:

答案 0 :(得分:1)

每当您发现相机与您尝试绘制的内容之间存在奇怪的同步问题时,通常会出现代码中某处混淆世界坐标与视点坐标(或反之亦然)的症状。 / p>

您正在使用SpriteBatch进行渲染,对吗?当我查找the version of SpriteBatch#draw() which you are calling的API时,它表示前两个浮点数是你在世界中渲染精灵的位置,而四个整数与源的和高度有关。源图像。

当您将(0,0)作为位置传递时,它会在您的视口中将图像绘制在游戏世界的0,0处,而不是(0,0)。

我建议采用更简单的方法 - 而不是尝试投影或取消投影坐标,将绘制位置(前两个浮点数)设置为stage.getCamera().position.xstage.getCamera().position.y