我正在尝试使用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();
当我尝试调整屏幕大小时,它不会更新到中心,它会向远处移动。
答案 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();