【问题标题】:How to setup camera properly?如何正确设置相机?
【发布时间】:2015-07-08 15:18:43
【问题描述】:

在我的课堂上,我正在实现 ApplicationListener,所以在我的 create 方法中,这就是我所做的:

public void create(){
camera=new Camera();
camera.setToOrtho(false,screenW,screenH);
}

//then on the render method:
public void render(){
camera.update();
}

但是当我使用Gdx.input.getY() 时,结果是相反的,当我向上时 Y 坐标变小,当我向下时它变得更高。为了更好地理解:

【问题讨论】:

    标签: java camera libgdx coordinates


    【解决方案1】:

    看看相机类和 unproject 方法。那应该在屏幕坐标和世界坐标之间转换。 (可能是更有效的方法,但为了说明):

    float x = Gdx.input.getX();
    float y = Gdx.input.getY();
    float z = 0.0f;
    Vector3 screenCoordinates = new Vector3(x, y, z);
    Vector3 worldCoordinates = camera.unproject(screenCoordinates);
    

    然后将 worldCoordinates 向量用于您需要的任何地方。

    编辑:添加了小的工作示例和屏幕截图。我的屏幕截图没有捕捉到鼠标,因此是红色的“星”。但是,当您在屏幕上移动鼠标时,这个简单的应用程序会以“初始”和“未投影”坐标显示 y 坐标。自己试试吧。我想这就是你的意思,不是吗?

    import com.badlogic.gdx.ApplicationListener;
    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.graphics.OrthographicCamera;
    import com.badlogic.gdx.math.Vector3;
    
    public class SimpleInputCoords implements ApplicationListener {
       private OrthographicCamera camera;
    
       @Override
       public void create() {
          camera = new OrthographicCamera();
          camera.setToOrtho(false, 800, 480);
       }
    
       @Override
       public void render() {
           int x = Gdx.input.getX();
           int y = Gdx.input.getY();
           int z = 0;
           System.out.println("UnmodifiedYCoord:"+y);
    
           Vector3 screenCoordinates = new Vector3(x, y, z);
           Vector3 worldCoordinates = camera.unproject(screenCoordinates);
           System.out.println("UnprojectedYCoord:"+worldCoordinates.y);
       }
    
       @Override
       public void dispose() {
       }
    
       @Override
       public void resize(int width, int height) {
       }
    
       @Override
       public void pause() {
       }
    
       @Override
       public void resume() {
       }
    

    }

    【讨论】:

    • 我试过了,但还是一样,当我这样做时,我应该删除 //camera.setToOrtho() 吗??
    • 我编辑了答案以添加一个非常小的工作示例,您可以自己尝试。除非我误解了您要定义的问题。
    • 如何实现 worldCoordinates ?它只是一个 Vector3
    • 我不确定你的意思。在我给出的示例中,worldCoordinates 只是保存了 worldCoordinates,但是 (x,y) 在 (0,0) 处“开始”,这是我认为你想要的,而不是在“y 值与顶部的 y 反转” “,就像你看到的那样。也许我根本不明白您要做什么,而其他人将不得不回答您的问题。
    • 当我触摸屏幕底部而不将 camera.unproject() 放在 Vector3 上时,我希望 Y 坐标等于 0。
    【解决方案2】:

    在 Java 中,坐标从左上角 (0,0) 开始。在 100 x 100 上,(100,0) 位于右上方,(0, 100) 位于左下方。所以你看到的行为是预期的。

    http://inetjava.sourceforge.net/lectures/part2_applets/InetJava-2.1-2.2-Introduction-to-AWT-and-Applets_files/image001.gif

    【讨论】:

    • 那么这在使用输入模块时是正常的吗?我注意到,当我在屏幕上渲染某些东西时,Y 坐标是正常的,你越往下它就越低。
    猜你喜欢
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2012-12-03
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多