当前位置: 首页 > news >正文

HarmonyOS应用开发实战:猫猫大作战-EventHub 事件总线

前言

EventHub是 HarmonyOS 的事件总线机制,用于组件或模块之间的松耦合通信。在「猫猫大作战」中,EventHub 用于音效播放得分变更游戏状态切换等跨组件通知。

一、EventHub 基础

import{EventHub}from'@kit.ArkUI';// 创建 EventHubconsteventHub=newEventHub();// 订阅事件eventHub.on('scoreChanged',(score:number)=>{console.info(`得分更新:${score}`);// 更新 UI 等});// 发布事件eventHub.emit('scoreChanged',2450);

二、游戏中的应用

// 音效管理模块 — 订阅事件classSFXService{constructor(hub:EventHub){hub.on('playMerge',()=>this.play('merge'));hub.on('playLevelUp',()=>this.play('level_up'));hub.on('playGameOver',()=>this.play('game_over'));hub.on('playButton',()=>this.play('button'));}privateplay(name:string):void{console.info(`播放音效:${name}`);}}// 游戏引擎 — 发布事件classGameEngine{privatehub:EventHub;constructor(hub:EventHub){this.hub=hub;}onMerge():void{this.hub.emit('playMerge');}onGameOver():void{this.hub.emit('playGameOver');}}

三、EventHub vs @State

特性EventHub@State
通信范围任意模块组件树
耦合度低(松耦合)中(父子依赖)
数据流单向事件双向绑定
调试较难追踪易追踪
适用场景跨模块通知UI 状态同步

四、最佳实践

  1. 事件命名规范playMergestateChanged动词+名词
  2. 订阅在初始化aboutToAppear时订阅
  3. 取消订阅hub.off('eventName')防内存泄漏
  4. 不传递复杂对象:只传递必要的数据参数

五、事件列表

事件名数据触发时机
playMerge合并时
playLevelUp等级升级时
playGameOver得分结束时
scoreChanged得分得分变化
stateChanged状态状态切换

总结

EventHub 实现跨模块的松耦合事件通信,适合音效播放等全局通知。核心要点:hub.on()订阅、hub.emit()发布、 注意取消订阅防泄漏

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • EventHub 官方文档
  • 第 107 篇:@Extend
  • 第 109 篇:startAbility
  • 第 110 篇:startByType
http://www.jsqmd.com/news/1291273/

相关文章:

  • Anaconda与Conda虚拟环境:Python项目环境隔离与管理的完整指南
  • 2026年7月苏州市联通500M融合宽带怎么选 - 找卡家园
  • 2026年7月上海市普陀区移动单宽带避坑全攻略 - 找卡家园
  • TypeScript 7.0 Go语言重写编译器:10倍性能提升架构解析
  • 出生医学证明公证双认证:慧办好在线办理材料与流程
  • Spring Boot中统一设置HTTP请求头的最佳实践
  • 电桥电路设计全解析:从信号调理到工程实践
  • 技术团队的工程效率度量:DORA指标与SPACE框架的实践对比
  • TypeScript 7.0 Go语言重写编译器:10倍性能提升的架构革命
  • Ollama 本地模型接入 OpenClaw v2.7.9,存储路径修改与模型拉取步骤(含安装包)
  • 3. light wam 模型加载
  • Monorepo 的架构选型:Turborepo、Nx、pnpm Workspace 的全维度对比
  • STM32中断机制详解:从轮询到中断驱动的嵌入式开发思维升级
  • PLC编程核心:五大语言、扫描周期与常用指令实战解析
  • STM32CubeMX+Keil环境搭建全攻略:从零配置到LED闪烁实战
  • 2026.7.27-初入ros+slam+opencv第五天--区分服务和话题的区别和理解参数并懂得参数的修改
  • Python实战:ECMWF S2S回算数据批量下载全流程指南
  • ThreeJS Water:5分钟打造惊艳的3D互动水面效果
  • 13、时谐信号的复数表示与相量法
  • Flutter安全存储在OpenHarmony上的适配与实践
  • 降AIGC率工具哪个免费又好用?2026年20款实测排行榜
  • Visa的“百年变局”:当支付巨人用AI裁掉自己7%的员工
  • Python input()函数深度解析:从基础用法到生产级安全实践
  • C语言实现蔡勒公式:日期转星期的高效算法与工程实践
  • 文献综述怎么写(2027 最新版):AI 从检索到成稿附降 AI 率方法
  • 2026年7月湖北省武汉市移动单宽带怎么安装 - 找卡家园
  • 高频注入法:无感电机低速定位的核心原理与工程实践
  • OpenClaw框架Token性能优化实战与最佳实践
  • Unity游戏移植微信小游戏:三步法避坑与性能优化实战
  • 出生证公证怎么办?出生证公证办理所需材料有哪些?