LibGDX ShapeRenderer 圆形绘制

8

我尝试了几个解决方案来绘制生成的坐标圆。但filledCircle方法有问题,我不知道是什么问题。我该用什么方法替换它呢?

错误信息:

FilledCircle不能被解析或者不是一个字段

代码:

package com.example.game;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;

public class MainClass extends ApplicationAdapter {
SpriteBatch batch;
OrthographicCamera camera;
ShapeRenderer shapeRenderer;
private Sprite sprite;     

@Override
public void create () {
    shapeRenderer = new ShapeRenderer();
    batch = new SpriteBatch();
}

@Override
public void render () {

     Gdx.gl.glClearColor(1, 1, 1, 1);
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

     Gdx.gl.glEnable(GL20.GL_BLEND);
     Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
     Gdx.gl.glDisable(GL20.GL_BLEND);

      batch.setProjectionMatrix(camera.combined);

      batch.begin();
      batch.draw(sprite, 200, 200, 64, 64);
      shapeRenderer.begin(ShapeType.FilledCircle);
      shapeRenderer.filledCircle(50, 50, 32);
      shapeRenderer.setColor(Color.BLACK);
      shapeRenderer.end();
      batch.end();  
}


}
2个回答

23

方法begin(ShapeRenderer.ShapeType type)接受一个ShapeType参数。有3个Shapetype: Filled(填充)、Line(线)和Point(点)。像你正在使用的FilledCircle是不存在的(这就是错误消息所说的)。

因此,你应该使用shapeRenderer.begin(ShapeType.Filled);

此外,也没有filledCircle()方法。尝试shapeRenderer.circle(50, 50, 32);

编辑:

以下是你的代码,已经去掉了一些错误。你需要理解它并完成一些部分,复制粘贴是不行的。

@Override
public void create () {
    shapeRenderer = new ShapeRenderer();
    batch = new SpriteBatch();

    camera = new OrthographicCamera(300, 480); //FILL THE VALUES HERE
    sprite = new Sprite(new Texture(Gdx.files.internal("badlogic.jpg")));  //FILL THE VALUES HERE

     sprite.setBounds(200, 200, 64, 64);
}


@Override
public void render () {

     Gdx.gl.glClearColor(1, 1, 1, 1);
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

     Gdx.gl.glEnable(GL20.GL_BLEND);
     Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
     Gdx.gl.glDisable(GL20.GL_BLEND);

      batch.setProjectionMatrix(camera.combined);

      batch.begin();  
      sprite.draw(batch);  
      batch.end();

      shapeRenderer.setColor(Color.BLACK);
      shapeRenderer.begin(ShapeType.Filled);
      shapeRenderer.circle(50, 50, 32);
      shapeRenderer.end();
}

4
请注意,之前ShapeRenderer类中曾经有“filledCircle”方法和类型。在1.0.0版本之前的一次清理中,ShapeRenderer类中删除了很多冗余内容。可能还有其他的SO答案仍然涉及旧API。 - P.T.
似乎还好,但是现在在第36行出现了空指针异常。批处理有问题吗?应该是什么问题? - plaidshirt
批处理没问题,问题出在你的相机上。它是空的,因为你从未初始化它。例如,在 onCreate() 中:camera = new OrthographicCamera() - MadEqua
好的,我已经修复了,谢谢。但是在第40行也有同样的错误。 这个:batch.draw(....) - plaidshirt
1
我会编辑答案并进行所需更改。你的代码有很多错误。 - MadEqua

1

在批处理中无法初始化形状渲染器,您需要停止批处理(批处理结束)并启动形状渲染器,在停止形状渲染器后,可以再次启动批处理。

对于错误表示抱歉,我的英语不太好。


2
这篇帖子似乎没有为问题提供一个高质量的答案。请编辑您的回答,或将其作为评论发布到问题中。 - sɐunıɔןɐqɐp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接