# StrayFog 框架 UI事件绑定指南 ## 一、事件绑定方式 ### 1.1 代码绑定(使用框架封装组件) ```csharp public class LoginWindow : AbsHFUIWindow { private SFUI_Button BtnLogin; protected override void OnRunAwake() { base.OnRunAwake(); // OnRunAwake: 初始化组件引用和按钮事件绑定(仅调用一次) BtnLogin = FindUICtrlByName("BtnLogin"); if (BtnLogin != null) { BtnLogin.OnAddClickListener += OnBtnLoginClick; BtnLogin.OnAddEnterListener += OnBtnLoginEnter; BtnLogin.OnAddExitListener += OnBtnLoginExit; } } protected override void OnOpen(Action _onOpenComplete) { base.OnOpen(_onOpenComplete); // OnOpen: 注册CTC事件监听(每次打开调用) HFFunCatalogue.Event.CTCEvent.AddListener( enHFCTCEvent.LoginResult, OnLoginResult); } protected override void OnClose(Action _onCloseComplete) { // OnClose: 移除事件监听(每次关闭调用) if (BtnLogin != null) { BtnLogin.OnAddClickListener -= OnBtnLoginClick; BtnLogin.OnAddEnterListener -= OnBtnLoginEnter; BtnLogin.OnAddExitListener -= OnBtnLoginExit; } HFFunCatalogue.Event.CTCEvent.RemoveListener( enHFCTCEvent.LoginResult, OnLoginResult); base.OnClose(_onCloseComplete); } void OnBtnLoginClick(GameObject go) { // 处理登录逻辑 - 使用框架标准调用方式 HFEvent_CTC_Login evt = HFFunCatalogue.New(); evt.account = "player_account"; evt.password = "encrypted_password"; evt.Dispatch(); } void OnBtnLoginEnter(GameObject go) { // 鼠标进入 } void OnBtnLoginExit(GameObject go) { // 鼠标退出 } void OnLoginResult(HFEventArgBase arg) { // 处理登录结果 } } ``` ### 1.2 框架封装UI组件列表 | 组件名 | 基类 | 说明 | |-------|------|------| | `SFUI_Button` | `AbsSFUI_Button : Button` | 按钮组件 | | `SFUI_Text` | `AbsSFUI_Text : Text` | 文本组件 | | `SFUI_Image` | `AbsSFUI_Image : Image` | 图片组件 | | `SFUI_Toggle` | `AbsSFUI_Toggle : Toggle` | 开关组件 | | `SFUI_ScrollRect` | `AbsSFUI_ScrollRect : ScrollRect` | 滚动区域 | | `SFUI_InputField` | `AbsSFUI_InputField : InputField` | 输入框 | ### 1.3 SFUI_Button事件委托 | 事件 | 委托签名 | 说明 | |-----|---------|------| | `OnAddClickListener` | `Click(GameObject go)` | 点击事件 | | `OnAddEnterListener` | `Enter(GameObject go)` | 鼠标进入 | | `OnAddExitListener` | `Exit(GameObject go)` | 鼠标退出 | | `OnAddPointerUpListener` | `PointerUp(GameObject go)` | 指针抬起 | --- ## 二、事件系统分类 ### 2.1 CTCEvent(客户端内部事件) ```csharp // 注册监听 HFFunCatalogue.Event.CTCEvent.AddListener( enHFCTCEvent.CardUpdate, OnCardUpdate); // 触发事件 HFEvent_CTC_CardUpdate evt = HFFunCatalogue.New(); evt.cardId = 123; HFFunCatalogue.Event.CTCEvent.Dispatch(evt); ``` ### 2.2 STCEvent(服务器事件) ```csharp // 在Manager中注册 HFFunCatalogue.Event.STCEvent.AddListener( enHFSTCEvent.PlayerInfo, OnPlayerInfo); ``` > **注意**:UI窗口中不监听STCEvent,应在Logic层Manager中监听。 --- ## 三、事件参数回收 ### 3.1 使用对象池 ```csharp // 获取事件参数(从对象池获取) HFEvent_CTC_PlayerLevelUp evt = HFFunCatalogue.New(); evt.playerId = 1; evt.newLevel = 10; // 触发事件(事件系统会自动回收) HFFunCatalogue.Event.CTCEvent.Dispatch(evt); ``` --- **版本**: v1.0 **适用范围**: GiftGameX项目业务开发人员