我正在尝试正确配置libGDX中的Camera
和Sprite
以正确显示2D坐标系,并在左下角显示原点。
我设置Camera
就像这样:
cameraWidth = Gdx.graphics.getWidth();
cameraHeight = Gdx.graphics.getHeight();
camera = new OrthographicCamera(1, cameraHeight/cameraWidth);
我将Sprite
设置为这样:
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指定的那样。唯一的问题是图像都显得模糊或拉伸,这是不好的。
这似乎是一个简单的问题,我只是想知道如何设置它,这样我就可以有一个合理的坐标系统,可以在正确的位置和正确的宽高比中绘制东西。感谢。
答案 0 :(得分:2)
更改视口以匹配屏幕的宽高比后,除非屏幕为方形,否则(0,0)将不再位于屏幕的左下角。如果屏幕比它高,那么x轴的可见部分仍将从0.0到1.0,但y轴上的0.0现在将在屏幕底部以外的某处。
如果您调整相机以使(0,0)位于屏幕的左下方,并记住可见的y轴将仅上升到 grapicsHeight / graphicsWidth 那么应该解决你的坐标问题。
我建议将相机设置为指向屏幕中间而不是左下角。有一个例子here就是这样做的,绘制一个2:1的矩形,它始终位于屏幕的中心,无论你调整多少,它总是以2:1的比例。
答案 1 :(得分:0)
我找到了解决这个问题的方法:
将相机设置为正射(即使它已经是正交相机)
camera.setToOrtho(false,1,screen height / screen width);
此外,每个精灵的位置必须设置为(x - sprite.getWidth()/2, y - sprite.getHeight()/2
。我扩展了Sprite
类并覆盖了setPosition
方法以解决此问题。现在,每次设置位置时,Sprite
最终都会进入你认为他们会去的地方,setPosition(0,0)
将其置于左下角,setPosition(1,height/width)
位于左上方。
奇怪的是,这会绘制以(x,y)点为中心的每个精灵,这是有意义的,因为从位置减去宽度/ 2和高度/ 2,除了不减去值不会让setPosition
通过左下角的精灵居中 - 它以我未想到的方式居中。