如何正确设置相机?
How to setup camera properly?
在我的 class 上,我正在实现 ApplicationListener,所以在我的创建方法上,我这样做了:
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 坐标变小,当我向下时,它得到 higher.For 更好的理解:
在Java中,坐标从左上角 (0,0) 开始。在 100 x 100 上,(100,0) 会在右上角,(0, 100) 会在左下角。所以您看到的行为是意料之中的。
看看相机 class 和 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 向量。
编辑:添加了小的工作示例和屏幕截图。我的屏幕截图没有捕捉到鼠标,因此是红色 "star"。但是这个简单的应用程序会在您在屏幕上移动鼠标时以 "initial" 和 "unprojected" 坐标显示 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() {
}
}
在我的 class 上,我正在实现 ApplicationListener,所以在我的创建方法上,我这样做了:
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 坐标变小,当我向下时,它得到 higher.For 更好的理解:
在Java中,坐标从左上角 (0,0) 开始。在 100 x 100 上,(100,0) 会在右上角,(0, 100) 会在左下角。所以您看到的行为是意料之中的。
看看相机 class 和 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 向量。
编辑:添加了小的工作示例和屏幕截图。我的屏幕截图没有捕捉到鼠标,因此是红色 "star"。但是这个简单的应用程序会在您在屏幕上移动鼠标时以 "initial" 和 "unprojected" 坐标显示 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() {
}
}