如何使用libgdx绘制一条线?

时间:2013-07-25 03:16:20

标签: libgdx

我正在尝试使用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 个答案:

答案 0 :(得分:5)

您必须拥有nullpointerException,因为您尚未创建任何ShapeRenderer对象。 在构造函数中插入此行。

shapeDebugger=new ShapeRenderer();

答案 1 :(得分:3)

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

选中link

答案 2 :(得分:1)

我的答案对你来说可能为时已晚,但对于人们来说,如何定位相同的问题。

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

在调整大小时更新视口!

//-----------------------------------------------------------------
@Override
public void resize (int width, int height) {
    camera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.update();        
}

答案 3 :(得分: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();