我读到带有精灵的辉光/粒子效果,效果很好。
是否有一种简单的方法可以通过简单的形状渲染功能(如圆圈?)来创建类似的模糊效果?
@Override
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
batch.end();
shapeRenderer.begin(ShapeRenderer.ShapeType.Point);
shapeRenderer.setAutoShapeType(true);
drawCircle();
shapeRenderer.end();
batch.begin();
}
private void drawCircle() {
shapeRenderer.setColor(Color.WHITE);
shapeRenderer.set(ShapeRenderer.ShapeType.Filled);
// apply effect ??
shapeRenderer.circle(10,10,2);
}
您不能将纹理与默认的ShapeRender一起使用。
有多种方法可以执行此操作,但最简单的方法是使用ShapeDrawer库。它向SpriteBatch等添加了一些“ ShapeRenderer like”功能。参见https://github.com/earlygrey/shapedrawer
是的,您可以创建“发光”效果,这可以通过使用超出边界的递减的alpha值进行绘制来实现。
首先,要定义发光效果参数,让我们确定发光对象的最大边界,发光结束处,光环的大小为auraSize
。
接下来,我们需要知道对象实心部分的大小,不发光的位,然后将其称为objSize
作为对象的大小。
为绘制此图,我们可以使用一个简单的for
循环和一些if
语句:
private void drawCircle() {
shapeRenderer.set(ShapeRenderer.ShapeType.Filled);
//Draw circles upto the size of aura
for(int radius = 0; radius < auraSize; radius++) {
/*
* Checks if radius fits object size, sets colour to solid white if so
* Interpolates alpha value to 0 based on distance to aura covered by radius otherwise
*/
if(radius <= objSize) {
shapeRenderer.setColor(Color.WHITE);
} else {
shapeRenderer.setColor(new Color(1, 1, 1,
MathUtils.lerp(1, 0, (radius - objSize) / (auraSize / objSize))));
}
//Draws the circle at the current radius
shapeRenderer.circle(10, 10, radius);
}
}