更改LibGDX(Java)中的坐标系

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-up
  • 如果你去3D,你就有了y-up
  • 默认坐标系是OpenGL中的右手坐标系,y-up.你当然可以通过一些矩阵魔法轻松改变它.

我们使用y-down的libgdx中只有两个位置是:

  • Pixmap坐标(左上角原点,y-down)
  • 触摸事件坐标,以窗口坐标给出(左上角原点,y-down)

同样,您可以使用相机或一点点矩阵数学轻松地将使用过的坐标系统更改为您想要的任何内容.

  • 创作者自己的答案.谢谢非常有用! (17认同)
  • @badlogic你指定他应该使用相机,但这将是使用SpriteBatch.draw方法和处理世界滚动和截头剔除自己的垮台?我正在开发一款自上而下的策略游戏. (3认同)
  • @Pasman,你可以使用batch.getProjectionMatrix().setToOrtho2D(). (3认同)
  • 一切都颠倒了!我可以翻转区域而不是纹理. (3认同)
  • 我假设有一些原因它是以它的方式开发的,但是如果你根本不使用任何相机而只是使用SpriteBatch.draw()绘制纹理/ Pixmaps /字体/等呢?我有帕斯曼的确切问题. (2认同)

Ric*_*ard 9

只是为了扩展一下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对象(或者您正在使用的任何对象)进行简单转换,并在每次操作之前调用一次.


ee.*_*ee. 5

有趣的图形库,我会说.我从下面的链接中找到了这个评估:

另一个问题是在Libgdx的不同部分使用了不同的坐标系.有时轴的原点位于左下角,y轴指向上方,有时位于精灵的左上角,指向下方.绘制网格时,原点甚至位于屏幕的中心.这导致了相当多的混乱和额外的工作,使一切都在屏幕上的正确位置.

http://www.csc.kth.se/utbildning/kandidatexjobb/datateknik/2011/rapport/ahmed_rakiv_OCH_aule_jonas_K11072.pdf

  • 但是如果你没有使用相机,那么你似乎运气不好,需要将API包装在外观中以改变它.Arrrgh ..为什么使用除了荒谬的普通标准左上角坐标系之外的任何东西?WHYYYYYYYYYYYYYYY?:( (3认同)
  • @Perce,因为数学. (2认同)