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的特定位置时,该位置没有按比例放大,纵横比将是一个巨大的问题,但我将尝试解决这个问题。