Libgdx适合所有决议的游戏

时间:2013-08-08 12:02:13

标签: libgdx

好的,我已经阅读了关于这个主题的所有可能的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必须有一个合理的方法,因为许多游戏已经发布,但我似乎无法找到可行的东西。有没有关于如何处理这个的任何建议?

2 个答案:

答案 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

http://www.youtube.com/watch?v=GeyUCOCmW8k

答案 1 :(得分:0)

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

if(Gdx.input.justTouched())

{

camera.unproject(touchPoint.set(Gdx.input.getX(),Gdx.input.getY(),0));

}

这里的touchPoint是一个Vector3 ..现在你可以在你的代码中的任何地方使用touchPoint ..