【问题标题】:LibGDX touch coordination confusionLibGDX 触摸协调混乱
【发布时间】:2014-03-04 22:39:38
【问题描述】:

据我了解,libGDX坐标系默认设置,所以(0,0)位于左下角,如下图:


(来源:gyazo.com

是否可以让它像JFrame一样工作,默认位置在左上角?

无论如何,回到我的实际问题,android(或者至少是我的手机)触摸坐标系统是全屏工作的(当手机放在一边时),所以默认 (0, 0) 位置位于顶部右上角,如下图:


(来源:gyazo.com

那么当我这样做时会发生什么:

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    System.out.println("X: " + screenX  + " Y: " + screenY);
    this.instance.player.setLocation(screenX, screenY);
    return false;
}

我只是简单的得到触摸屏的X,Y(基于android的全屏坐标系),然后在完全不同的libgdx坐标系上使用,

所以如果我触摸右上角,我的蓝色矩形将出现在左下角。

有没有办法让所有东西都像在 PC 上一样在左上角运行?

【问题讨论】:

    标签: java android libgdx


    【解决方案1】:

    您需要使用相机来执行此操作。如果您不使用相机,我强烈建议您添加一个,因为它会使事情变得更容易。只需调用camera.setToOrtho(true),它将LibGDX的坐标系切换到您想要的坐标系,左上角的(0,0)。

    要使用特定的视口宽度和高度而不是从 Gdx.graphics.getWidth/Height() 获得的,可以调用camera.setToOrtho(true, viewportWidth, viewportHeight)

    【讨论】:

    • 您是否也在使用相机绘制所有内容?确保将 SpriteBatch 的投影矩阵设置为 camera.combined。
    【解决方案2】:

    我不知道如何将其设置在左上角,但您可以将输入坐标转换为 libgdx 坐标。 我希望这可以帮助你或帮助别人:

    int Screen_height = Gdx.graphics.getHeight(); // Your screen height    
    
    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
       System.out.println("X: " + screenX  + " Y: " + (Screen_height - screenY));
       this.instance.player.setLocation(screenX, (Screen_height - screenY));
    return false;
    }
    

    【讨论】:

      【解决方案3】:

      是的,而且非常简单。 您只需从 Y 值中减去屏幕的高度。 所以: 手指位置 Y = 屏幕高度 - 你找到的 Y 值。

      【讨论】:

        【解决方案4】:

        有一个更简单的方法: 只需在下面做减法

        Gdx.graphics.getHeight()-screenY
        

        如您所见,只有这行代码是必需的。

        【讨论】:

        • 对不起各位,由于 Stackoverflow 应用程序中的错误没有显示我发布的答案,我写了很多次相同的东西......对不起
        【解决方案5】:

        创建变量fingerY并使用减法:

        fingerY= Gdx.graphics.getHeight()-screenY;
        

        所以,如果 screenY 等于左下角的 10 并且屏幕的高度等于 240 像素:

        fingerY=240-10
        

        然后fingerY=距离左下角230像素,而距离左上角10像素。

        【讨论】:

        • 希望对你有帮助
        【解决方案6】:

        你需要在com.badlogic.gdx.graphics.Camera类中使用方法project(Vector3 worldCoords)

        private Camera camera;
        ............
        
        @Override
        public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        

        创建向量的一个实例并使用输入事件处理程序的坐标对其进行初始化。

            Vector3 worldCoors = new Vector3(screenX, screenY, 0);
        

        将世界空间中给定的 worldCoors 投影到屏幕坐标。

            camera.project(worldCoors);
        

        使用投影坐标。

            world.hitPoint((int) worldCoors.x, (int) worldCoors.y);
        
            OnTouch();
        
            return true;
        }
        

        【讨论】:

        • 您需要提供一些信息以及代码
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-10
        • 1970-01-01
        • 2015-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多