【发布时间】:2017-05-26 21:42:19
【问题描述】:
我想在我的 libGDX 应用程序中设置一个可按下的钢琴键,如下所示:
当一个键被按下时,我需要将它从上到下更改(这很容易使用图像按钮)。
我正在苦苦挣扎的是如何布局所有按钮,以便它们用于类似于钢琴键盘的东西。白色钢琴键图像是矩形的,但黑色钢琴键需要放在它上面。下面显示了我的一个白色钢琴键图像的样子,顶角有一个死角,我打算放一个黑色音符。
使用Table 是行不通的,因为表格会并排布置所有内容,这会给我留下空白。我看到你可以使用Stack,但这只是将每个孩子直接放在最后一个孩子的上面,所以这似乎也没有帮助。
如果有帮助,我的代码是这样的:
Skin skin;
Stage stage;
SpriteBatch batch;
private TextButton button1;
private TextButton button2;
@Override
public void create () {
batch = new SpriteBatch();
stage = new Stage();
Gdx.input.setInputProcessor(stage);
createSkin();
Table table = new Table();
table.setFillParent(true);
stage.addActor(table);
// Create a button with the "default" TextButtonStyle. A 3rd parameter can be used to specify a name other than "default".
button1 = new TextButton("First note", skin);
button1.getLabel().setFontScale(5);
button2 = new TextButton("Second note", skin);
button2.getLabel().setFontScale(5);
table.add(button1).width(500).height(500);
table.add(button2).width(500).height(200);
}
@Override
public void render () {
super.render();
Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
}
@Override
public void resize (int width, int height) {
stage.getViewport().update(width, height, true);
}
@Override
public void dispose () {
stage.dispose();
skin.dispose();
}
private void createSkin() {
skin = new Skin();
Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
pixmap.setColor(Color.WHITE);
pixmap.fill();
skin.add("white", new Texture(pixmap));
skin.add("default", new BitmapFont());
TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
textButtonStyle.up = skin.newDrawable("white", Color.DARK_GRAY);
textButtonStyle.down = skin.newDrawable("white", Color.BLUE);
textButtonStyle.checked = skin.newDrawable("white", Color.DARK_GRAY);
textButtonStyle.over = skin.newDrawable("white", Color.DARK_GRAY);
textButtonStyle.font = skin.getFont("default");
skin.add("default", textButtonStyle);
}
据我所知,使用表格无法重叠,但我找不到另一种方法。使用scene2d可以做到这一点吗?
【问题讨论】:
标签: android libgdx 2d-games scene2d