4

我正在尝试使用 libgdx 绘制一些用于调试的线,但我失败了。这是我的代码

public class MainMenu extends Screen implements InputProcessor {

private OrthographicCamera camera;
SpriteBatch myBatch;
ShapeRenderer shapeDebugger;

public MainMenu(Game game) {
    super(game);
    camera= new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.update();}

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    myBatch.begin();
    stage.draw();
    Gdx.gl10.glLineWidth(10);
    shapeDebugger.setProjectionMatrix(camera.combined);
    shapeDebugger.begin(ShapeType.Line);
    shapeDebugger.setColor(1, 1, 1, 1);
    shapeDebugger.line(2, 2, 5, 5);
    myBatch.end();
    }
}

我收到一条错误消息

shapeDebugger.setProjectionMatrix(camera.combined);

@Pranav008

非常感谢你。我没想到我需要启动它。但我有一个真正的问题。我像这样将线画到游戏屏幕的中心。

    Gdx.gl10.glLineWidth(2);
    shapeDebugger.setProjectionMatrix(camera.combined);
    shapeDebugger.begin(ShapeType.Line);
    shapeDebugger.setColor(1, 1, 1, 1);
    shapeDebugger.line(Gdx.graphics.getWidth()/2, 0,Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight());
    shapeDebugger.end();

当我尝试调整屏幕大小时,它不会更新到中心,它会远离右边。

4

4 回答 4

5

你一定得到了nullpointerException,因为你还没有创建任何 ShapeRenderer 对象。在您的构造函数中插入这一行。

shapeDebugger=new ShapeRenderer();
于 2013-07-25T04:34:47.107 回答
3

请记住,使用 SpriteBatch 嵌套 Shaperender 可能会导致问题。

检查此链接

于 2013-07-25T18:32:23.903 回答
1

我的回答对你来说可能为时已晚,但对于那些有同样定位问题的人来说。

关于调整大小后位置的第二个问题是因为视口没有改变。Aldo 你的窗口大小改变了你的应用程序仍然使用由函数创建的相同像素大小camera.setToOrtho

在调整大小时更新视口!

//-----------------------------------------------------------------
@Override
public void resize (int width, int height) {
    camera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.update();        
}
于 2014-04-28T17:44:37.573 回答
0

定义和初始化 ShapeRenderer

ShapeRenderer shapeDebugger;

@Override
public void create() {
    shapeDebugger = new ShapeRenderer();
 ...

在渲染回调中画线

    @Override
    public void render() {
        //render scene

        Gdx.gl.glClearColor(69f / 255, 90f / 255, 100f / 255, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    ... 
   shapeDebugger.setProjectionMatrix(camera.combined);
        shapeDebugger.begin(ShapeRenderer.ShapeType.Line);
        Gdx.gl.glLineWidth(10 / camera.zoom);
        shapeDebugger.setColor(1, 0, 0, 1);
        shapeDebugger.line(screenWidth / 2, 0, screenWidth / 2, screenHeight);
        shapeDebugger.line(0, screenHeight / 2, screenWidth, screenHeight / 2);
        shapeDebugger.end();
于 2021-04-09T11:26:07.083 回答