Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 作为演员在libGDX中绘制透明形状?_Android_Libgdx - Fatal编程技术网

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()时,它将确保禁用混合。does
Gdx.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();
}