Java 尝试在LibGDX中绘制一个圆

Java 尝试在LibGDX中绘制一个圆,java,android,libgdx,2d,render,Java,Android,Libgdx,2d,Render,这是非常基本的,但我不知道出了什么问题。基本上我试着在我的一个物体的某个区域画一个圆。我在构造函数(称为srDebugCircle)中初始化了一个shaperender,并在render()方法中使用这个for循环来绘制每个对象 for (GameObject object : levels.get(LEVEL_INDEX)) { if (object.getType() == ObjectType.SWINGING_SPIKES) { object.dr

这是非常基本的,但我不知道出了什么问题。基本上我试着在我的一个物体的某个区域画一个圆。我在构造函数(称为srDebugCircle)中初始化了一个
shaperender
,并在
render()
方法中使用这个for循环来绘制每个对象

for (GameObject object : levels.get(LEVEL_INDEX)) {
        if (object.getType() == ObjectType.SWINGING_SPIKES) {
            object.draw(batch);
            srDebugCircle.begin(ShapeType.Filled);
            srDebugCircle.circle(object.getxPos() + object.getWidth()/2, object.getyPos(), object.getWidth()/2);
            srDebugCircle.setColor(Color.BLACK);
            srDebugCircle.end();
        }

        if (object.getType() == ObjectType.COIN && (Coin) object).isVisible()) {
            object.draw();
        }
        ...
}
问题是,当我为圆添加代码时,我只看到15个对象中的4个。当我删除它/注释它时,它会像往常一样工作-然而,在这两种情况下,我永远看不到黑色填充的圆圈

我具体讲的是这一部分:

            srDebugCircle.begin(ShapeType.Filled);
            srDebugCircle.circle(object.getxPos() + object.getWidth()/2, object.getyPos(), object.getWidth()/2);
            srDebugCircle.setColor(Color.BLACK);
            srDebugCircle.end();

有人知道我为什么会有这个问题吗

问题是,您有两个
渲染器同时运行:
SpriteBatch批处理
shaperender srDebugCircle

这可能会导致奇怪的行为。
要解决此问题,请先为一个
渲染器调用
end()
/
Batch
,然后为另一个调用
begin()

在您的情况下,它看起来像这样:

object.draw(batch);
batch.end()
srDebugCircle.begin(ShapeType.Filled);
srDebugCircle.setColor(Color.BLACK);    // Set Color before drawing
srDebugCircle.circle(object.getxPos() + object.getWidth()/2, object.getyPos(), object.getWidth()/2);
srDebugCircle.end();

还要注意,在
SpriteBatch
上调用
end()
会调用
flush()
,应该尽量少调用。因此,使用
SpriteBatch
绘制所有内容,然后绘制所有
shaperender
内容可能是一个好主意。

Springrbua回答的另一种方法是使用pixmap而不是shaperender进行绘制。在SpriteBatch和ShaperRenderer之间切换是一项昂贵的操作,并且Pixmaps不需要结束SpriteBatch。Pixmap提供的绘制方法比ShaperEnder少,但它确实包括绘制填充圆

Pixmap pixmap = new Pixmap(width, height, Pixmap.Format.RGBA8888);
pixmap.setColor(Color.BLACK);
pixmap.fillCircle(x, y, r);
Texture texture = new Texture(pixmap);

// render
batch.begin();
batch.draw(texture, x, y);
batch.end();

我想你在引号之间少了一个括号。可能不是原因。(object.getType()==ObjectType.COIN&”((COIN)object.isVisible())在绘制圆之前,您必须设置颜色。在屏幕上绘制后,您应该始终使用pixmap.dispose()和texture.dispose()进行内存管理