gpt4 book ai didi

java - 为什么我的坐标系没有反射(reflect)我请求的标准坐标轴?(LibGdx)

转载 作者:行者123 更新时间:2023-12-01 12:08:05 24 4
gpt4 key购买 nike

基本上,我希望我的坐标系将 (0,0) 作为屏幕的左上角(在 Swing 和 Android Canvas 绘图中使用此)。我看到了一个很棒的线程Changing the Coordinate System in LibGDX (Java) 。我使用了创建者提供的代码,但我正在绘制的矩形仍然位于屏幕底部。(屏幕截图)

enter image description here

这是我绘制矩形的代码(我使用一个类 GameWorld 来管理所有“游戏对象”,另一个类 GameRenderer 来渲染所有游戏对象)这两个类都有一个方法,可以从GameScreen 的渲染方法。GameScreen.java中相关代码

public class GameScreen implements Screen {
//manage game objects
private GameWorld world;
//render game objects
private GameRenderer renderer;
public GameScreen() {
world = new GameWorld();
renderer = new GameRenderer(world);
}
public void render(float delta) {
world.update(delta);
renderer.render();
}
.....
}

在 GameWorld.java 中

public class GameWorld {
private Rectangle rectangle;
public GameWorld() {
rectangle = new Rectangle(0, 0, 17, 12);
}
public void update(float delta) {
rectangle.setX(rectangle.getX() + 1);
if(rectangle.getX() > Gdx.graphics.getWidth()) {
rectangle.setX(0);
}
}
public Rectangle getRect() {
return rectangle;
}
}

在 GameRenderer.java 中

public class GameRenderer {
private ShapeRenderer shapeRenderer;
private OrthographicCamera cam;
private GameWorld myWorld;
public GameRenderer(GameWorld theWorld) {
myWorld = theWorld;
cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

}
public void render() {
shapeRenderer = new ShapeRenderer();
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(87/255.0f, 109/255.0f, 120/255.0f, 1);
Rectangle toDraw = myWorld.getRect();
shapeRenderer.rect(toDraw.getX(), toDraw.getY(),
toDraw.getWidth(), toDraw.getHeight());
shapeRenderer.end();

}
}

最后在我测试游戏的 Desktop.java 中,

public class DesktopLauncher {
public static void main (String[] arg) {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.title = "My test";
config.width = 272;
config.height = 408;
new LwjglApplication(new MyGdxGame(), config);
}

}

有人看出我哪里做错了吗?为什么屏幕底部仍然绘制矩形。我使用了创建者提供的代码,并将矩形的顶部 y 坐标指定为零。

最佳答案

您没有将相机的投影应用到 ShapeRenderer。

shapeRenderer.begin() 之前添加此行:

shapeRenderer.setProjectionMatrix(cam.combined);

此外,您应该将 ShapeRenderer 的实例化从 render() 移至类构造函数,这样您就不会在每一帧上创建一个新实例。

关于java - 为什么我的坐标系没有反射(reflect)我请求的标准坐标轴?(LibGdx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27448409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com