试图在LibGDX中画一个圆圈

时间:2015-03-13 15:02:32

标签: java android libgdx 2d render

这是非常基本的,但我无法弄清楚出了什么问题。基本上我试图围绕我的一个物体的某个区域绘制一个圆圈。我在构造函数中初始化了一个ShapeRenderer(名为 srDebugCircle )并在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();

有人能理解为什么我遇到这个问题吗?

2 个答案:

答案 0 :(得分:5)

Springrbua答案的另一种选择是使用Pixmaps而不是ShapeRenderer绘制。在SpriteBatch和ShaperRenderer之间切换是一项昂贵的操作,Pixmaps不需要结束SpriteBatch。 Pixmap提供的绘制方法比ShapeRenderer少,但它确实包括绘制一个实心圆。

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();

答案 1 :(得分:2)

问题是,您有两个Renderer / Batch es同时运行:
SpriteBatch batchShapeRenderer srDebugCircle 这可能导致奇怪的行为 要解决此问题,请在end() / Renderer之前致电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();

另请注意,在end()调用SpriteBatch时调用flush()应尽可能少地调用SpriteBatch。因此,使用ShapeRenderer绘制所有内容然后绘制所有{{1}}内容可能是个好主意。

相关问题