首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libGDX重复背景纹理绘制困难

libGDX重复背景纹理绘制困难
EN

Stack Overflow用户
提问于 2016-11-28 18:39:05
回答 1查看 176关注 0票数 0

和其他人一样,我很难跟踪libgdx的坐标转换。我正在创建一个类似拼字游戏,并在屏幕上拖动一个手指平底相机。这些瓷砖是Actor在一个Stage上,我在舞台的相机上做相机转换。这一切都很有效。现在我试着给它一个花哨的背景,让瓷砖坐下来。我不太明白如何用抽签方法来使它发挥作用。

代码语言:javascript
复制
//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. 将该区域绘制到屏幕原点。

然而,有了这样的代码,我遇到了各种奇怪的问题,比如背景区域的下界在屏幕外开始移动,摄像机缩放时上边界移动,纹理比手指的移动速度快(虽然背景区域的边界是正确的),y轴平移等等。改变代码会改变这些症状,但是我没有找到一个模式来试图接近正确的方向。画这样的画有什么智慧吗?

编辑:这里有一些屏幕截图,以增加清晰度。

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2016-11-29 07:24:57

每当您看到相机和您想要绘制的东西之间出现奇怪的同步问题时,通常都会出现将世界坐标与代码中的视点坐标(反之亦然)混淆的症状。

你用一个SpriteBatch来进行渲染,对吗?当我查找 which you are calling的API时,它说,前两个浮点数是您在世界上呈现精灵的位置,这四个整数与源图像的源和高度有关。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40851237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档