Sos*_*vpm 57 java 2d sprite coordinate-systems libgdx
LibGDX有一个坐标系,其中(0,0)位于左下角.(如下图所示:http://i.stack.imgur.com/jVrJ0.png)
这让我头撞墙,主要是因为我正在移植一个我用普通坐标系统制作的游戏(其中0,0位于左上角).
我的问题:有没有简单的方法来改变这个坐标系?
bad*_*gic 119
如果您使用相机(您应该),更改坐标系非常简单:
camera= new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
camera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Run Code Online (Sandbox Code Playgroud)
如果你使用TextureRegions和/或TextureAtlas,除此之外你需要做的就是调用region.flip(false,true).
我们默认使用y-up的原因(您可以如上图所示轻松更改)如下:
我们使用y-down的libgdx中只有两个位置是:
同样,您可以使用相机或一点点矩阵数学轻松地将使用过的坐标系统更改为您想要的任何内容.
只是为了扩展一下badlogic上面说的内容,如果你使用的是TextureAtlas(带有TextureRegions),你需要翻转它们,正如badlogic所说,除了相机工作之外.如果您使用的是TextureAtlas,则可以在加载地图册后立即使用此代码:
String textureFile = "data/textures.txt";
atlas = new TextureAtlas(Gdx.files.internal(textureFile), Gdx.files.internal("data"));
// Let's flip all the regions. Required for y=0 is TOP
Array<AtlasRegion> tr = atlas.getRegions();
for (int i = 0; i < tr.size; i++) {
TextureRegion t = tr.get(i);
t.flip(false, true);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
如果你想隐藏转换而不想在设置之后再考虑它,你可以创建一个继承了你需要的所有功能的类,但首先在将坐标传递给它的父类函数之前转换坐标.不幸的是,这需要花费很多时间.
您也可以创建一个方法,y' = height - y对整个Coordinate对象(或者您正在使用的任何对象)进行简单转换,并在每次操作之前调用一次.
有趣的图形库,我会说.我从下面的链接中找到了这个评估:
另一个问题是在Libgdx的不同部分使用了不同的坐标系.有时轴的原点位于左下角,y轴指向上方,有时位于精灵的左上角,指向下方.绘制网格时,原点甚至位于屏幕的中心.这导致了相当多的混乱和额外的工作,使一切都在屏幕上的正确位置.