好的,我已经阅读了关于这个主题的所有可能的Google条目,我仍然不确定要走哪条路。目前这是我的设置:
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必须有一个合理的方法,因为许多游戏已经发布,但我似乎无法找到可行的东西。有没有关于如何处理这个的任何建议?
答案 0 :(得分:1)
首先,你必须让SpriteBatch类的一个对象来绘制东西。 设置相机的位置后......您必须更新它...添加以下行
camera.update();在更新它的位置后。
接下来,可以通过添加
来解决缩放问题batcher.setProjectionMatrix(camera.combined); gl.glClear之后(GL10.GL_COLOR_BUFFER_BIT);
这非常有用,因为游戏涉及大量计算,特别是在集成时 物理学(BOX2D)融入其中。因此,尝试使用像800 / 40,600 / 40这样的小型相机 并根据该相机进行所有计算。然后batcher.setProjectionMatrix(camera.combined)将处理缩放事物。确保您根据相机进行所有计算。 这里batcher是SpriteBatch类的对象。 在此之后..现在画东西......
batcher.begin()
//画东西......
batcher.end()
您可以参考这些链接 https://github.com/libgdx/libgdx/tree/master/tests/gdx-tests/src/com/badlogic/gdx/tests
答案 1 :(得分:0)
可能的问题可能是您没有将鼠标坐标转换为世界坐标。这可以通过以下方式完成
if(Gdx.input.justTouched())
{
camera.unproject(touchPoint.set(Gdx.input.getX(),Gdx.input.getY(),0));
}
这里的touchPoint是一个Vector3 ..现在你可以在你的代码中的任何地方使用touchPoint ..