Android 作为演员在libGDX中绘制透明形状?
我试图在一个类中的屏幕上绘制一个简单的矩形,并将其用作演员 但无论我做什么,似乎都没有办法让它透明化。有人知道怎么做吗? 提前谢谢Android 作为演员在libGDX中绘制透明形状?,android,libgdx,Android,Libgdx,我试图在一个类中的屏幕上绘制一个简单的矩形,并将其用作演员 但无论我做什么,似乎都没有办法让它透明化。有人知道怎么做吗? 提前谢谢 public class AreaColorRect extends Actor { public float opacity = 0.0f; private Color shapeFillColor = new Color(); public Rectangle area; public ShapeRenderer shapeRe
public class AreaColorRect extends Actor {
public float opacity = 0.0f;
private Color shapeFillColor = new Color();
public Rectangle area;
public ShapeRenderer shapeRen;
public AreaColorRect(float x, float y, float w, float h) {
shapeRen = new ShapeRenderer();
this.area = new Rectangle(x, y, w, h);
}
@Override
public void draw(SpriteBatch batch, float parentAlpha) {
shapeRen.begin(ShapeType.Filled);
shapeRen.setColor(new Color(shapeFillColor.r, shapeFillColor.g, shapeFillColor.b,
0.0f));
shapeRen.rect(area.x, area.y, area.width, area.height);
shapeRen.end();
}
public void setShapeFillColor(float r, float g, float b) {
this.shapeFillColor = new Color(r, g, b, 1);
}
}
你在混淆视听。在启动
shaperender
之前,先结束您的SpriteBatch
。看见不过,这可能不是问题所在
您还需要启用混合。您可以全局执行一次,或者根据需要启用(并禁用)。它应该由SpriteBatch
上下文启用,但我认为它不适用于shaperender
Gdx.graphics.getGL10().glEnable(GL10.GL_BLEND); // Or GL20
渲染背景和演员的顺序也会影响透明度
最后,您已将不透明度设置为0,因此对象将完全不可见。这通常没有任何作用。(我想你只是想从当前的100%可见状态中得到一个改变?很抱歉把这个挖出来。不过,既然你在为安卓系统添加标签,我想我应该把我的经验加进去。 我最近在一个问题上花了将近4个小时,alpha混合根本不起作用,因为它不适合你 结果表明,libgdx'
AndroidApplicationConfiguration
默认使用0位作为alpha通道。
如果你也是这样,那么在你
初始化()应用程序之前,将其更改为更合理的设置可能是值得的。我刚刚决定在游戏中使用Scene2d,并遇到了同样的问题:如何使用矩形作为演员并在屏幕上绘制它
然后我在
(默认情况下,Scene2d有一个SpriteBatch,用于处理演员的绘制)
如果演员需要以不同的方式进行绘画,例如使用
ShaperEnder,批处理应该结束,然后在
方法结束。当然,这会导致批处理被刷新,因此
应该明智地使用。变换与投影矩阵
从批次中可以使用:
嗯,不透明度-/α值仍然是错误的,这是事实。但这只是因为我在测试不同的值。这个问题仍然存在。我做了一些更改(比如首先结束spritebatch),但rect仍然出现。即使alpha仍然是前面提到的0.0fasp.T,在执行该代码时看起来您已经禁用了混合。注意:默认情况下,在SpriteBatch上调用end()时,它将确保禁用混合。doesGdx.graphics.getGL20().glEnable(GL20.GL_混合)代码>必须在render()中调用,或者在屏幕的构造函数中只调用一次?我正在试图理解您所写的内容。。。你是说像这样的事吗<代码>AndroidApplicationConfiguration配置=新建AndroidApplicationConfiguration()代码>config.a=1代码>初始化(新建MainGame(),配置)代码>?@某人某处是的,没错。虽然我推荐config.a=8
,因为这些是用于alpha通道的位数。谢谢,对我来说效果很好。。。(组中变换正确)
private ShapeRenderer renderer = new ShapeRenderer();
public void draw (Batch batch, float parentAlpha) {
batch.end();
renderer.setProjectionMatrix(batch.getProjectionMatrix());
renderer.setTransformMatrix(batch.getTransformMatrix());
renderer.translate(getX(), getY(), 0);
renderer.begin(ShapeType.Filled);
renderer.setColor(Color.BLUE);
renderer.rect(0, 0, getWidth(), getHeight());
renderer.end();
batch.begin();
}