是否可以在不使用Image?-LibGdx的情况下绘制透明层

时间:2017-05-30 11:04:54

标签: java android libgdx

在我的游戏中,当我点击一个按钮时,弹出窗口就会出现。

同时,我想在屏幕上绘制一个透明图层(弹出窗口除外),以便在弹出窗口处于活动状态时显示,后台被禁用。

这样的事情:

enter image description here

是否可以制作现有的实体图像以创建透明叠加?


我应该使用透明图像本身来制作透明图层的印象?

2 个答案:

答案 0 :(得分:2)

Image是可以绘制的Actor,但您需要透明度,使用Actor

创建一个Actor作为透明图层并按正确顺序添加,以便您可以仅为后台演员禁用触摸。

你应该保持演员的顺序。

stage=new Stage();
Texture texture=new Texture("badlogic.jpg");

Image image=new Image(texture);
image.addListener(new ClickListener(){
            @Override
            public void clicked(InputEvent event, float x, float y) {
                Gdx.app.log("TouchTest","Clicked on Image");
            }
        });

stage.addActor(image);

Actor actor=new Actor();   // this is your transparent layer 
actor.setSize(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
stage.addActor(actor);

// Popup should on the top or your actor(touch layer) 

Image image1=new Image(texture);
image.setPosition(100,100);
stage.addActor(image1);

Gdx.input.setInputProcessor(stage);    

您还可以管理触摸层的可触摸性。

actor.setTouchable(Touchable.disabled);  // when you want to disable touch on 

在我的建议中,您应该使用Dialog作为弹出窗口。 Dialog是一个包含内容表的模态窗口。

修改

在您的参考图片中,您似乎需要半透明图层,因此请在上面的代码中使用semiTL代替Actor

Pixmap pixmap = new Pixmap(1,1, Pixmap.Format.RGBA8888);
pixmap.setColor(Color.BLACK);
pixmap.fillRectangle(0, 0, 1, 1);
Texture texture1=new Texture(pixmap);
pixmap.dispose();

Image semiTL=new Image(texture1);
semiTL.setSize(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
semiTL.getColor().a=.8f;
stage.addActor(semiTL);

答案 1 :(得分:0)

正如Abhishek Aryan所说,您可以使用Pixmap为背景创建大小合适的基础。但是,您可以像这样使用sprite和sprite drawable来代替使用图像

private Drawable getStageBackground() {
    Pixmap stageBg = new Pixmap(
            Gdx.graphics.getWidth(),
            Gdx.graphics.getHeight(),
            Pixmap.Format.RGB888);

    Sprite image = new Sprite(new Texture(stageBg));
    image.setColor(1, 1, 1, 0.7f);

    return new SpriteDrawable(image);
}

并使用如下的stageBackground属性在对话框窗口样式中传递此可绘制对象

Window.WindowStyle style = new Window.WindowStyle();
style.stageBackground = getStageBackground();