在我的游戏中,当我点击一个按钮时,弹出窗口就会出现。
同时,我想在屏幕上绘制一个透明图层(弹出窗口除外),以便在弹出窗口处于活动状态时显示,后台被禁用。
这样的事情:
是否可以制作现有的实体图像以创建透明叠加?
或
我应该使用透明图像本身来制作透明图层的印象?
答案 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();