0

好的,我已经阅读了关于这个主题的所有可能的谷歌条目,但仍然不确定该采取什么途径。目前这是我的设置:

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,因为已经发布了许多游戏,但我似乎找不到可行的方法。任何人对如何继续处理这个有任何建议吗?

4

2 回答 2

1

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

相机.更新();更新它的位置后。

接下来,可以通过添加来解决缩放问题

batcher.setProjectionMatrix(camera.combined); 在 gl.glClear(GL10.GL_COLOR_BUFFER_BIT) 之后;

这非常有用,因为游戏涉及大量计算,特别是当您将物理(BOX2D)集成到其中时。因此,尝试使用像 800/40,600/40 这样的较小相机并根据该相机进行所有计算。然后 batcher.setProjectionMatrix(camera.combined) 将处理缩放的事情。确保您正在根据相机进行所有计算。这里的 batcher 是 SpriteBatch 类的对象。在这之后..现在画东西..

batcher.begin()

//画东西...

批处理器.end()

您可以参考这些链接 https://github.com/libgdx/libgdx/tree/master/tests/gdx-tests/src/com/badlogic/gdx/tests

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

于 2013-08-08T18:59:08.273 回答
0

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

if (Gdx.input.justTouched())

{

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

}

这里 touchPoint 是 Vector3 ..现在您可以在代码中的任何位置使用 touchPoint ..

于 2013-08-09T18:05:50.650 回答