JMonkeyEngine3——NiftyGui EventBus Notification

前言

在NiftyGui中,可以通过绑定事件监听器来处理事件,还有一种通过EventBus的方式来订阅相关事件的发生回调。

使用EventBus Notification

NiftyGui的EventBus订阅,遵循以下几个步骤:

  1. xml中screen必须绑定一个ScreenController
  2. 在ScreenController中为指定id的control(NiftyGui组件)订阅相关事件执行函数
  3. 相关事件执行函数的统一格式写法是:
    1 @NiftyEventSubscriber(id="相关组件id")
    2 public final void FunctionName(final String id, final 相关组件的事件对象){
    3         // 处理订阅
    4 }

那么,我们怎么知道一个组件会收到哪个事件对象呢?举个例子,我们使用一个<control name="button">,则查询button这个组件的wiki:https://github.com/nifty-gui/nifty-gui/wiki/Button,可知button这种组件(control)会收到的事件对象类是ButtonClickedEvent这个对象:

 则我们可以在ScreenController中定义如下函数为id为button0的button组件(control)订阅事件:

1 @NiftyEventSubscriber(id="button0")
2     public final void onTextFieldChange(final String id, final ButtonClickedEvent event){
3         // 处理相关逻辑
4     }

同理,如果我们要知道TextField这个组件(control)收到的是哪个事件对象,则根据wiki可知是TextFieldChangedEvent这个类对象:

 所以我们可以在ScreenController中定义如下函数为id为textField0的textField组件(control)订阅事件:

1 @NiftyEventSubscriber(id="textField0")
2     public final void onTextFieldChange(final String id, final TextFieldChangedEvent textFieldChangedEvent){
3         // 处理相关事件
4     }

其他组件的订阅类似如此。

注意事项

对于有些组件(control),在添加<interact/>时可能与相关EventBus事件订阅会冲突,所以只能删除<interact/>元素或删除EventBus事件执行函数订阅,也就是说二选一。

posted @ 2024-07-12 16:06  JhonKkk  阅读(28)  评论(0)    收藏  举报