2016-11-28 53 views
0

像其他人一样,我在遵循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是:

  1. 组边界点到屏幕边界
  2. unproject这些点到世界空间中找到纹理的区域,我应该吸取
  3. 将该区域绘制到屏幕原点

但是,使用这样的代码我有各种奇怪的问题,如背景区域的下边界开始离屏,相机放大时上边界移动,纹理平移快于我的手指移动(尽管背景区域的边界正确平移),y轴平移镜像等。更改代码会改变这些症状,但我还没有找到一种模式来尝试更接近正确。任何这样画画的智慧语言?

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

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

first opened

我可以将起来,这向上移动背景的上限(如果有下边界,我永远不能找到它)

enter image description here

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

enter image description here

回答

1

每当您看到相机与您要绘制的东西之间的奇怪同步问题时,通常都会在代码中某处出现令人困惑的世界坐标与视点坐标(反之亦然)的症状。

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

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

我会推荐一个更简单的方法 - 而不是尝试投影或未投影坐标,将绘制位置(前两个浮点数)设置为stage.getCamera().position.xstage.getCamera().position.y