如何在 LibGDX 中的按钮上切换“over”样式?

我想使用TextButton. 菜单应该可以通过鼠标和键盘访问。对于正确的悬停行为,我像往常一样设置样式:


TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();

textButtonStyle.up = skin.newDrawable("background", Color.GRAY);

textButtonStyle.down = skin.newDrawable("background", Color.DARK_GRAY);

textButtonStyle.checked = skin.newDrawable("background", Color.DARK_GRAY);

textButtonStyle.over = skin.newDrawable("background", Color.LIGHT_GRAY);

textButtonStyle.font = skin.getFont("default");

这适用于鼠标(over当鼠标悬停时切换样式)。但是,我希望能够通过键盘选择菜单项。“当前选择”菜单项应该可以使用箭头键选择,并且enter应该确认该项目。


键盘交互在这里不是问题,而是在按钮上设置“突出显示”模式。我想使用键盘选择按钮的行为应该与用鼠标悬停在它上面的行为相同。但看起来没有办法使用 API 来“切换”按钮的状态。有isOver()方法,但没有setOver()方法。


有任何想法吗?我真的必须创建两种样式并将它们切换出来setStyle()吗?我会认为那丑陋..


慕码人2483693
浏览 141回答 3
3回答

慕虎7371278

如果您希望以编程方式使按钮认为它已悬停在其上,请发送一个InputEventwith 类型enter,表示鼠标已进入按钮:InputEvent event = new InputEvent();event.setType(InputEvent.Type.enter);event.setPointer(-1);button.fire(event);使用exit InputEvent来散焦它:InputEvent event = new InputEvent();event.setType(InputEvent.Type.exit);event.setPointer(-1);button.fire(event);

慕莱坞森

为您的演员创建一个自定义类并覆盖您的 isOver 方法以返回 isFocused || super.isOver()顺便说一句,您可以查看https://github.com/MrStalfelge/gdx-controllerutils/wiki/Button-operable-Scene2d以了解不要重新发明轮子。

一只名叫tom的猫

所以基本上,你能做的最简单的事情就是直接从你的皮肤中检索所需的按钮样式并将其应用到按钮上,如下所示:Skin skin = getYourSkin(); // or even button.getSkin() I believe should also workbutton.setStyle(skin.get(styleName, ButtonStyle.class));这样你就不需要创建一个样式,但你可以从你的皮肤定义中获取它
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java