【问题标题】:libGDX Coordinate SystemlibGDX 坐标系
【发布时间】:2013-02-15 09:23:38
【问题描述】:

我正在尝试在 libGDX 中正确配置我的 CameraSprites,以正确显示在 2D 坐标系中,原点位于左下角。

我这样设置我的Camera

cameraWidth = Gdx.graphics.getWidth();
cameraHeight = Gdx.graphics.getHeight();
camera = new OrthographicCamera(1, cameraHeight/cameraWidth);

我这样设置我的Sprites:

sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);
sprite.setScale(scale);
sprite.setPosition(startX,startY);

我的问题是sprite.setSize(x,y)。如果我将所有精灵的大小设置为(1, texture aspect ratio),那么所有内容都以正确的显示比例绘制(不被弄脏或拉伸),但没有任何东西绘制在正确的位置。例如,如果我在 (0,0) 处绘制一些东西,它的左下角会离开屏幕左侧并向上绘制多个像素。

我注意到,通过改变比例,我可以让东西在不同的地方绘制——也就是说,如果我将它设置为(1, display aspect ratio),事情看起来非常接近在正确的地方绘制——它们只是从它们的中心绘制,而不是正如 LibGDX 指定的那样,它们的左下角。唯一的问题是图像都显示为模糊或拉伸,这不好。

这似乎是一个简单的问题,我只想知道如何设置它,这样我就可以拥有一个合理的坐标系,在正确的位置以正确的纵横比绘制事物。谢谢。

【问题讨论】:

    标签: java 2d libgdx projection


    【解决方案1】:

    一旦您更改视口以匹配屏幕的纵横比,则 (0, 0) 将不再位于屏幕的左下方,除非屏幕是方形的。如果屏幕宽度大于高度,则 x 轴的可见部分仍会从 0.0 变为 1.0,但 y 轴上的 0.0 现在将位于屏幕底部之外的某个位置。

    如果您调整相机使 (0, 0) 位于屏幕的左下方,并记住可见的 y 轴只会上升到 grapicsHeight / graphicsWidth 那么应该可以解决你的坐标问题。

    我建议将相机设置为指向屏幕中间而不是左下角。有一个示例here 就是这样做的,它绘制了一个始终位于屏幕中心的 2:1 矩形,无论您调整多少大小,它始终保持 2:1 的比例。

    【讨论】:

    • 谢谢,虽然我已经按照您所说的进行了工作,但没有成功。
    【解决方案2】:

    我已经找到了解决这个问题的方法:

    将相机设置为正交(即使它已经是正交相机)

    camera.setToOrtho(false,1,screen height / screen width);
    

    此外,每个精灵的位置必须设置为(x - sprite.getWidth()/2, y - sprite.getHeight()/2。我扩展了Sprite 类并覆盖了setPosition 方法来解决这个问题。现在,每次设置位置时,Sprites 最终都会到达您“认为他们会去的地方”,setPosition(0,0) 将其放在左下角,setPosition(1,height/width) 在左上角。

    奇怪的是,这会绘制以 (x,y) 点为中心的每个精灵,这是有道理的,因为从位置中减去 width/2 和 height/2,除了 not 减去值不会使setPosition 通过左下角使精灵居中 - 它以我还没有弄清楚的方式居中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多