Libgdx所有分辨率内的拟合游戏

Libgdx所有分辨率内的拟合游戏,libgdx,Libgdx,好的,我已经阅读了所有关于这个主题的谷歌条目,但仍然不确定该走哪条路。目前,我的设置如下: static final float WIDTH = 800; static final float HEIGHT = 600; @Override public void resize(int width, int height) { camera = new OrthographicCamera(WIDTH, HEIGHT);

好的,我已经阅读了所有关于这个主题的谷歌条目,但仍然不确定该走哪条路。目前,我的设置如下:

static final float WIDTH = 800;
static final float HEIGHT = 600;

@Override
public void resize(int width, int height) {
    camera = new OrthographicCamera(WIDTH, HEIGHT);                            
    camera.position.set(WIDTH / 2, HEIGHT / 2, 0);                             
    glViewport = new Rectangle(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());  
    ... 
}

 public void render(float delta) {      

GL20 gl = Gdx.graphics.getGL20();  
gl.glClearColor(1, 0, 0, 1);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);  
gl.glViewport((int) glViewport.x, (int) glViewport.y,
                (int) glViewport.width, (int) glViewport.height);       

camera.update();  
    ....
 }
这在我的屏幕上做得很好,但有很大的缺点。比例不会被拉伸。例如,当我在800x600世界中定义精灵时,它在1280x720屏幕上保持完全相同。这也会影响放置在特定位置的精灵,因为800x600上的位置400px与1280x720屏幕上的位置不同。也有一些特定的区域,如果有什么事情发生,但是我的解决方案和我在互联网上找到的解决方案也不适用。让我们不要谈论纵横比,因为每次我想到它,我的头都会痛


libGdx必须有一个合乎逻辑的方法来实现这一点,因为已经发布了很多游戏,但我似乎找不到任何可行的方法。关于如何继续处理这件事有什么建议吗

首先,您必须创建SpriteBatch类的对象来绘制对象。 设置相机位置后..必须更新..添加以下行

camera.update();在更新它的位置之后

接下来,可以通过添加

batcher.setProjectionMatrix(camera.combined);gl.glClear之后(GL10.gl\u颜色\u缓冲\u位)

这是非常有用的,因为游戏需要大量的计算,特别是当你们积分的时候 物理学(BOX2D)对它们进行了深入研究。所以,试着用一个更小的相机,比如800/40600/40 然后batcher.setProjectionMatrix(camera.combined)将处理缩放操作。确保您正在根据相机进行所有计算。 这里batcher是SpriteBatch类的对象。 在这之后…现在来画东西

batcher.begin()

//画东西

batcher.end()

你可以参考这些链接


可能的问题是您没有将鼠标坐标转换为世界坐标。这可以通过以下方式完成

if(Gdx.input.justTouched())

{

取消投影(touchPoint.set(Gdx.input.getX(),Gdx.input.getY(),0))

}


这里的接触点是一个矢量3.现在您可以在代码中的任何位置使用接触点。

啊,这确实解决了部分问题,我面临的其他问题是,当我在屏幕上触摸800x600的特定位置时,该位置没有按比例放大,纵横比将是一个巨大的问题,但我将尝试解决这个问题。