试图在 LibGDX 中画一个圆圈
Posted
技术标签:
【中文标题】试图在 LibGDX 中画一个圆圈【英文标题】:Trying to draw a circle in LibGDX 【发布时间】:2015-05-16 03:08:48 【问题描述】:这真的很基本,但我不知道出了什么问题。基本上我试图在我的一个对象的某个区域周围画一个圆圈。我在构造函数中初始化了一个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();
谁能明白我为什么会遇到这个问题?
【问题讨论】:
我认为您在引号之间缺少括号。也许不是原因。(object.getType() == ObjectType.COIN && "("(Coin) object).isVisible()) 画圆前必须先设置颜色。 【参考方案1】:Springrbua 的替代方案是使用 Pixmaps 而不是 ShapeRenderer 进行绘制。在 SpriteBatch 和 ShaperRenderer 之间切换是一项昂贵的操作,并且 Pixmap 不需要结束 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();
【讨论】:
在屏幕上进行内存管理后,您应该始终使用 pixmap.dispose() 和 texture.dispose()【参考方案2】:问题是,你有两个Renderer
/Batch
es 同时运行:SpriteBatch batch
和 ShapeRenderer 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();
另请注意,在SpriteBatch
上调用end()
会调用flush()
,应尽可能少地调用它。因此,最好先用SpriteBatch
绘制所有东西,然后再绘制所有ShapeRenderer
东西。
【讨论】:
以上是关于试图在 LibGDX 中画一个圆圈的主要内容,如果未能解决你的问题,请参考以下文章
围绕另一个 Sprite 旋转一个 Sprite -libGDX-