为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2021-07-01 13:05:19
我想使用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()吗?我会认为那丑陋..
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

如果您希望以编程方式使按钮认为它已悬停在其上,请发送一个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);


查看完整回答
反对 回复 2021-07-07
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

为您的演员创建一个自定义类并覆盖您的 isOver 方法以返回 isFocused || super.isOver()

顺便说一句,您可以查看https://github.com/MrStalfelge/gdx-controllerutils/wiki/Button-operable-Scene2d以了解不要重新发明轮子。


查看完整回答
反对 回复 2021-07-07
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

所以基本上,你能做的最简单的事情就是直接从你的皮肤中检索所需的按钮样式并将其应用到按钮上,如下所示:


Skin skin = getYourSkin(); // or even button.getSkin() I believe should also work

button.setStyle(skin.get(styleName, ButtonStyle.class));

这样你就不需要创建一个样式,但你可以从你的皮肤定义中获取它


查看完整回答
反对 回复 2021-07-07
  • 3 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信