首页 文章 精选 留言 我的

精选列表

搜索[开源洗白],共10000篇文章
优秀的个人博客,低调大师

开源游戏引擎 Godot 3.6.2 发布

Godot 3.6.2 现已发布,这是一个维护版本。 值得注意的是,原始版本存在一个影响 Windows 二进制文件(至少是编辑器)的回归问题,导致崩溃(GH-111979、GH-112021)。这是由于官方构建容器的 MinGW-GCC 14.2.1 更新所致。目前项目团队已暂时撤销该更改,并重建了 Windows 二进制文件。如果你在 2025-10-25 21:30 UTC 之前下载了此 Windows 版本或导出模板,建议重新下载,因为二进制文件已被替换。 具体更新内容包括: Changed Buildsystem:更新官方构建的工具链(Fedora 42 base、Mono 6.12.0.206、MinGW-GCC 14.2.1,Xcode 16.2) (build-containers#156)。 由于将 Windows 工具链更新到 MinGW-GCC 14.2.1 后,LTO 出现崩溃问题,因此暂时回滚了更新。3.6.2-stable Windows二进制文件(编辑器和导出模板)已于 2025 年 10 月 25 日 21:30 UTC 使用之前的 MinGW-GCC 版本重新构建。 Network:mbedTLS:更新至 mbedTLS 3.6.5(GH-108382,GH-111845)。 Porting:Android:更新至target API 35、NDK r28、16kb 页面大小(GH-108433)。 Porting:Android:解决 API 35 UI 变化(GH-110255)。 Porting:Android:将 minsdk 设置为 21,解决 Opus 中的fseeko错误(GH-111061)。 Porting:iOS:将窗口创建切换到 UIScene(GH-111103)。 Thirdparty:启用 miniupnpc API 18 构建(GH-100389)。 Fixed Buildsystem:通过删除 AGL 框架链接修复 macOS 26 上的构建(GH-110898)。 Editor::修复清除后无法分配脚本的问题(GH-108171)。 Editor::修复 self-contained 模式下的打开编辑器数据/设置文件夹菜单(GH-110414)。 Export修复 macOS 模板检查的操作顺序(GH-108930)。 GUI:修复使用特定字体的颜色标签时换行可能无法正常工作(GH-109695)。 Rendering:Batching:修复MultiRect类型转换错误问题(GH-109111)。 更新说明:https://godotengine.org/article/maintenance-release-godot-3-6-2/

优秀的个人博客,低调大师

开源游戏引擎 Godot 4.5 发布

Godot引擎今年最重磅的版本:4.5稳定版现已发布。在 4.5 版本中,Godot着重提升了易用性与稳定性,同时在渲染、脚本、平台支持等多个方面带来重大改进。 以下是主要亮点与详细更新内容。 一、亮点 Stencil Buffer支持 新增 Stencil Buffer,可以用来做壁洞、遮罩等效果,让壁面、遮挡的渲染控制更灵活。 屏幕阅读器支持(Screen Reader Support) 借助 AccessKit,Control 节点等 GUI 元素支持屏幕阅读器,为视力障碍或学习障碍用户改进体验。编辑器中部分(Project Manager、标准 UI 节点、Inspector)已有初步支持。 脚本回溯与自定义日志(Script Backtracing & Custom Loggers) 即使在 Release 构建中,也能获得错误发生的确切调用堆栈(call stack)信息。用户可以拦截日志/错误,以便做错误报告工具等。 Shader Baker(着色器预编译器) 在导出(export)设置中启用后,编辑器会扫描场景与着色器,提前编译目标平台所需格式,从而显著缩短启动或首次运行中的等待时间。比如在 Windows + D3D12 与 macOS + Metal 的组合中,部分测试项能看到20 倍启动时间缩短。 实时预览国际化(Internationalization Live Preview) 开发者可以在编辑器里直接预览不同语言环境下 GUI 的界面效果。这有助于在多语言支持下调整界面布局。注意,目前界面方向(layout direction)只跟主 locale 同步。 二、通用改进 2D TileMap 物理系统重构 以前每个 Tile 会对应一个物理 body,数量多会造成性能问题。4.5 中 TileMapLayer 的物理形状会尽可能合并,提高效率。 深度复制(Deep Duplicate)增强 新增duplicate_deep()方法,用于 Resource、Array、Dictionary 等,可以更可靠、可控地复制子资源或内容。之前的 deep 参数在某些情况下不能覆盖所有子元素的问题得到修复。 定制构建配置 Profile 提升 编辑引擎构建配置时,不仅检测项目中用到的类,还能设置对应的构建选项,更好地为项目量身定做。支持 GDExtensions 使用情况的检测。 编辑器体验改进 游戏视图中新增 “静音(Mute Game)” 切换按钮,方便在调试过程中关闭声音。 支持脚本中把资源(Resource)拖放到脚本中并以 UID(唯一标识)方式预加载(preload),代替路径方式,从而减少资源路径分离或重命名导致的问题。 运行时允许在 Remote 节点列表中选择多个节点,并编辑公共属性。 编辑器语言可以即时切换,不再需要重启编辑器。 Inspector 面板中区块(section)可以折叠(collapse)或展开,并且在区块名旁边能看到启用状态。 导出变量为 Variant 类型时,Editor 中会对类型选择与值输入做更灵活处理。 脚本编辑器中为 Color 类型值增添颜色预览,并支持点预览图标直接弹出颜色选择器。 可以在 Editor 的命令面板(command palette)里执行项目中特定的 EditorScripts,以便快速操作。 在资源复制粘贴过程中,“Paste as Unique” 选项使粘贴资源时能直接创建唯一副本,而不仅仅是引用。 在项目管理器(Project Manager)里新增“复制项目”(Duplicate Project)按钮,方便备份或分支项目。如果更新引擎版本可能导致不可逆变更,还会提示备份。 GUI 相关改进 FoldableContainer 节点:可折叠区块,支持“手风琴”式展开,仅一个区块打开。 标签(Label)支持叠加效果层(stacked effects),例如复杂阴影、描边等更灵活控制样式。 控制节点(Control)支持 focus 与 mouse 行为递归(recursive)禁用或启用,使复杂 UI 的行为控制更容易。 图标与界面清晰度 编辑器 UI 在 HiDPI 屏幕上看起来更清晰;图标等 UI 元素在高分辨率屏幕上模糊问题大幅改善。 三、平台支持 Android 引入 TouchActionsPanel,为平板/手机上的编辑器用户提供常用操作按钮(比如保存、撤销)以便快速调用。 支持 Android 15 的 16KB 内存页面(page size)特性。 支持 edge-to-edge 显示模式,使游戏画面尽可能占满屏幕空间,同时允许系统状态栏/导航栏重叠显示。 支持访问设备原始相机输入流(camera feed),方便做 AR 或实时滤镜处理。 Linux 支持原生 Wayland 子窗口(sub-window)功能;在支持 Wayland 的桌面环境中,Godot 可以生成独立子窗口(比如弹出窗口、设定窗口等)。 Apple / macOS / visionOS 在 macOS 上引入游戏嵌入窗口 (embedded game window) 支持。 新增对 Apple visionOS 的原生导出支持,使 Godot 项目可以在 Vision Pro 上运行,目前为“窗口化”应用(非全沉浸式体验)。 Windows Windows 导出时,对于 exe 文件的元数据(图标、产品名称、公司信息等),之前依赖外部工具rcedit,现在可以在任何平台上本地完成这些操作,不再依赖外部工具。 Web WebAssembly 的 SIMD 支持上线,提升 Web 游戏的性能表现,尤其在 CPU 负荷较重的情况下会更明显。 四、脚本语言与扩展 C# / .NET Android 导出的 APK 中的 .NET 程序集(assemblies)现在直接从 APK 加载,而不是先提取到缓存,这样能避免版本混乱和权限问题。 GDScript 支持可变长度参数(variadic arguments):函数可以接受不定数量的参数。 引入抽象类和抽象方法(abstract classes / methods):允许声明一个类为抽象类(不能直接实例化),并定义抽象方法,子类必须实现这些方法。 GDExtension 支持注册主循环(main loop)回调,例如引擎启动与关闭等生命周期回调。这对于插件扩展或与引擎底层交互非常有帮助。 五、系统级别与渲染 动画 (Animation) 新增BoneConstraint3D,含 AimModifier3D、CopyTransformModifier3D、ConvertTransformModifier3D 等,用于将一个骨骼绑定到另一个骨骼,使得动画动作更自然、更灵活。 导入 (Import) 恢复批量修改资源(import)属性的功能:可以在资源浏览面板中选中多个文件,在 Import Dock 修改某些属性后,一键重新导入。 输入 (Input) 使用 SDL3 来处理游戏控制器(gamepad)的输入支持。这意味着未来控制器特性(例如自适应触发,震动,麦克风,动作控制等)更新会更快、更稳定。 导航 (Navigation) 引入专门的 2D 导航服务器(NavigationServer2D),使纯 2D 游戏不再依赖带有 3D 支持的导出模板,从而减小体积,优化性能。 导航区域计算支持异步(async)处理,可以在后台线程中进行,从而减少主线程负担。 物理 (Physics) 在 SceneTree 中实现 3D 物理插值(interpolation),修复之前在 RenderingServer 中实现导致的一系列问题。对节点 transform 的插值查询问题得到解决。虽然底层有很多变化,但保留了原有 API,以避免破坏现有项目。 渲染 (Rendering) 支持基于环境光的镜面遮蔽 (specular occlusion from ambient light),使一些物体缝隙、裂隙间不会意外反射天空等光源。 支持 Bent Normal Maps(弯曲法线贴图)以改善光照与间接光反射的准确性。 加入 SMAA 1x 抗锯齿支持(Subpixel Morphological Anti-Aliasing)以替代或增强 FXAA 类型的抗锯齿效果。 在支持的移动硬件上显式使用半精度浮点格式 (half-precision / F16) 渲染,以节省资源、提高性能与帧率稳定性。 XR / AR /虚拟现实 对 OpenXR 的 D3D12 后端支持。 在 Vulkan 移动渲染器中支持“foveated rendering”(眼动渲染 / 边缘简化渲染)通过 “Fragment Density Map” 扩展,以减少边缘区域的渲染负担。 支持 XR 渲染模型(render models):控制器等交互组件模型会按设备正式显示。 支持 Meta / Pico 等头显的 Application SpaceWarp / 帧合成(frame synthesis)功能,以改善低功耗 / 高刷新率头显上的体验。

优秀的个人博客,低调大师

Harmony 鸿蒙路由框架:TheRouter 开源

TheRouter 是一个用于移动端APP,包括 Android、iOS、Harmony 三端的模块化、组件化开发的一整套解决方案框架。提供了三端高一致性,对移动端开发者更友好,让开发人员更适应,使用起来也更顺手。在鸿蒙上, TheRouter 基于HMRouter做了深度定制,不仅支持平台化应用实现组件化、跨模块调用、动态化等功能的集成等功能基础上,还提供了编译时安全检查、支持动态路由下发与修改、路由 Path 一对多等高度动态能力。 Github: https://github.com/HuolalaTech/hll-wp-therouter-harmony/ 官网:http://therouter.cn/ TheRouter Harmony 核心功能具备如下能力: 页面导航跳转能力(Navigator) 跨模块依赖注入能力(ServiceProvider) 动态化能力(ActionManager) <br> 一、为什么要使用 TheRouter 路由是现如今移动端开发中必不可少的功能,尤其是企业级APP,可以用于将多模块页面跳转的强依赖关系解耦,同时减少跨团队开发的互相依赖问题。 对于大型 APP 开发,基本都会选用模块化(或组件化)方式开发,对于模块间解耦要求更高。 TheRouter 是一整套完全面向模块化开发的解决方案,不仅能支持常规的模块依赖解耦、页面跳转,同时提供了模块化过程中常见问题的解决办法。 <br> 1.1 TheRouter 鸿蒙端的三大能力 Navigator: 支持 Path 与页面多对一关系或一对一关系,可用于解决多端path统一问题 页面 Path 支持正则表达式声明 支持 json 格式路由表导出 路由表支持为页面添加注释说明 支持动态下发 json 路由表,降级任意页面为H5 支持页面跳转拦截处理 支持使用路由跳转到第三方 SDK 中的页面 ServiceProvider: 支持跨模块依赖注入 支持自定义注入项的创建规则,依赖注入可自定义参数 支持注入对象缓存,多次注入,只会 new 一次对象 ActionManager: 支持全局回调配置 支持多对一链式响应 支持优先级响应 方法支持返回值与入参 支持记录调用路径,解决调试期观察者模式无法追踪 Observable 的问题 <br> 二、鸿蒙路由方案 根据华为官方文档建议,从API 10开始,推荐使用 NavPathStack 配合 navDestination 属性进行页面路由。所以 TheRouter 也是按照这个方案实现的,如果你的项目还是使用 ohos.router 组件,建议尽早迁移。 详细内容请查看华为官方文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-router 无论哪个平台,路由的本质就是一个 Map,或者说是字典。其中 key 是,页面的 path,value 是路由项。对于 Action、ServiceProvider,也都是一样。 所以在鸿蒙上最核心的重点,是实现在编译期将注解 path 关联到具体的路由项,使其产生一个一对多或一对一的对应关系。其次就是要考虑如何与系统自带的路由表兼容,遵循系统方案而不是完全打造一套,否则可能引起将来的不确定性。 在 TheRouter 中,通过编译期的 hvigor 插件,解析全部的注解关键字,并将获取到的内容保存下来,在应用编译完成后,参照系统的路由表格式,生成一份增量的路由表,聚合到系统的路由表内。正是因为这样,才能做到兼容第三方SDK,正常跳转到第三方页面。既然第三方都能跳转,那么其他的二方、或自己的独立模块自然也就可以正常跳转了。 <br> 三、使用 TheRouter 页面跳转 3.1 声明路由项 如果一个页面允许被路由打开,则需要使用注解 @Route 声明路由项,每个页面允许声明多个路由项,也就是一对多的能力,极大降低多端路由统一时的业务影响面。 参数释义 path: 路由path 【必传】。 建议是一个url,并推荐三端url统一。path内支持使用正则表达式,允许多个path对应同一个Page。 description: 页面描述【可选】。 会被记录到路由表中,方便后期排查的时候知道每个path或Page是什么业务。 params: 页面参数【可选】。 自动写入当前页面参数中,允许写在路由表中动态下发修改默认值,或通过路由跳转时代码传入。 launchMode: 当前页的启动方式【可选】。 启动模式,可选项:'STANDARD'(默认)、'MOVE_TO_TOP_SINGLETON'、'POP_TO_SINGLETON'、'NEW_INSTANCE'。 <br> @Route({ path: BaseConstant.MAIN_PAGE, description: 'Demo首页', params: ["hello", "路由表默认参数"], launchMode:'STANDARD' }) @Component export struct MainPage { } <br> 3.2 发起页面跳转 传入的参数可以是 string 和基本数据类型、也可以是ESObject对象。 TheRouter.build("http://therouter.com/home") .withNumber("key1", 12345678) .withString("key2", "参数") .withBoolean("key3", false) .with({xxx:xxx}) // navigation、replace、pop 均可以额外传入 callback 参数,对当前跳转的个状态回调 .navigation(); // 替换页面(相当于先 pop 再 push) .replace(); // 关闭当前页 .pop(); <br> 3.3 路由表生成规则 如果两条路由的 path 完全相同,则认为是同一条路由,不会考虑参数是否相同。 路由表生成规则:编译期按照如下顺序取并集。 覆盖规则: 根据如下顺序,如果相同,后者可以覆盖前者的路由表规则。 编译期解析注解生成路由表 首先取 业务模块(har/hap) 中的路由表 再取 主hsp module 代码中的路由表 最后取 resources/base/profile/RouteMap.json 文件中声明的路由表。 如果编译期没有这个文件,会生成一份默认路由表放在这个目录内(编译完成后如果没有配置保留,会自动删掉);如果有,会将路由表合并。 运行时线上动态下发的路由表 路由表允许线上动态下发,将覆盖本地路由表,详见 【3.4 动态路由表的设计与使用】 如果编译期没有这个文件,会生成一份默认路由表放在这个目录内(编译完成后如果没有配置保留,会自动删掉);如果有,会将路由表合并,因此,对于没办法修改代码的第三方SDK内部,如果希望通过路由打开,只需要手动在 RouteMap.json 文件中声明,就能通过路由打开了。 <br> 3.4 动态路由表的设计与使用 TheRouter 的路由表是动态添加的,项目每次编译后,会在 app 内生成一份当前模块的全量路由表。这个路由表也可以后续通过远程下发的方式使用,例如远端可以针对不同的APP版本,下发不同的路由表达到配置目的。这样如果将来线上某些页面发生Crash,可以通过将这个页面的落地页替换为H5的方式,临时解决这类问题。 <br> 有两种推荐的远程下发方式可供使用方选择: 将打包系统与配置系统打通,每次新版本打包后自动将所有模块(hsp、har、hap) resource/rawfile/ 目录中的路由表文件上传到配置系统,聚合成一个 json 后,下发给对应版本 APP 。优点在于全自动不会出错。 配置系统无法打通,线上手动下发需要修改的路由项,因为 TheRouter 会自动用最新下发的路由项覆盖包内的路由项。优点在于精确,且流量资源占用小。 <br> 动态路由限制 :准确的说,应该是鸿蒙系统的限制。在鸿蒙上,路由表必须是静态的并且在编译期确定下来。TheRouter Harmony 做了一些黑科技处理,允许动态加载一个或多个路由表,但是动态加载的路由页面必须是在编译期就已经存在的,不能凭空新增(类似 Android 的 Activity,在编译后就不能再改或新增注册清单文件了)。 <br> // 与Android逻辑不同,此代码 必须 在页面打开之前,路由初始化之后调用。 建议紧跟 TheRouter.init() 调用 TheRouter.setRouteMapInitTask(task: (map: Map<string, routeitem>) =&gt; void); /** * 此处的 map 就是当前应用的路由表全量, * 当获取到远端路由表以后,把路由表继续传入map中,有重复项可自动覆盖 */ TheRouter.setRouteMapInitTask(() =&gt; { // 此处为纯业务逻辑,每家公司远端配置方案可能都不一样 const json = Connfig.doHttp("routeMap"); // 只需要将路由json返回给框架即可,不建议在任务中做耗时操作 return json; }); <br> 3.5 拦截器用法 框架内置四种自定义处理器可供业务场景定制,用于在路由跳转过程中,以切面的方式统一修改路由落地页参数信息。 Harmony 路由与 Android 路由的拦截器使用完全一致,可以直接参考【Android 文档 第三部分】。 // 所有拦截器方法均在 TheRouter 类下,可以直接如下方式全局调用 TheRouter.addNavigatorPathFixHandle() /** * 应用场景:用于修复客户端上路由 path 错误问题。 * 例如:相对路径转绝对路径,或由于服务端下发的链接无法固定https或http,但客户端代码写死了 https 的 path,就可以用这种方式统一。 * 注:必须在 TheRouter.build() 方法调用前添加处理器,否则处理器前的所有path不会被修改。 */ static addNavigatorPathFixHandle(handle: NavigatorPathFixHandle); /** * 页面替换器 * 应用场景:需要将某些path指定为新链接的时候使用。 也可以用在修复链接的场景,但是与 path 修改器不同的是,修改器通常是为了解决通用性的问题,替换器只在页面跳转时才会生效,更多是用来解决特性问题。 * * 例如模块化的时候,首页壳模板组件中开发了一个SplashActivity广告组件作为应用的MainActivity,在闪屏广告结束的时候自动跳转业务首页页面。 但是每个业务不同,首页页面的 Path 也不相同,而不希望让每个业务线自己去改这个首页壳模板组件,此时就可以组件中先写占位符https://kymjs.com/splash/to/home,让接入方通过 Path 替换器解决。 * 注:必须在 TheRouter.build().navigation() 方法调用前添加处理器,否则处理器前的所有跳转不会被替换。 */ static addPathReplaceInterceptor(interceptor: PathReplaceInterceptor); /** * 路由替换器 * 应用场景:常用在未登录不能使用的页面上。例如访问用户钱包页面,在钱包页声明的时候,可以在路由表上声明本页面是需要登录的,在路由跳转过程中,如果落地页是需要登录的,则先替换路由到登录页,同时将原落地页信息作为参数传给登录页,登录流程处理完成后可以继续执行之前的路由操作。 * * 路由替换器的拦截点更靠后,主要用于框架已经从路由表中根据 path 找到路由以后,对找到的路由做操作。 * * 这种逻辑在所有页面跳转前写不太合适,以前的做法通常是在落地页写逻辑判断用户是否具有权限,但其实在路由层完成更合适。 * 注:必须在 TheRouter.build().navigation() 方法调用前添加处理器,否则处理器前的所有跳转不会被替换。 */ static addRouterReplaceInterceptor(interceptor: RouterReplaceInterceptor); /** * 路由AOP拦截器 * 与前三个处理器不同的点在于,路由的AOP拦截器全局只能有一个。用于实现AOP的能力,在整个TheRouter跳转的过程中,跳转前,目标页是否找到的回调,跳转时,跳转后,都可以做一些自定义的逻辑处理。 * * 使用场景:场景很多,最常用的是可以拦截一些跳转,例如debug页面在生产环境不打开,或定制startActivity跳转方法。 */ public setRouterInterceptor(interceptor: (route: RouteItem, callback: (route: RouteItem) =&gt; void) =&gt; void); 3.6 高级用法 TheRouter同时支持更多页面跳转能力: 为第三方库里面的页面添加路由表,达到对某些页面降级替换的目的; 跳转过程拦截器(总共四层,可根据实际需求使用); 跳转结果回调; <br> 四、跨模块依赖注入 ServiceProvider 的设计 对于模块化开发中跨模块的调用,我们推荐采用 SOA(面向服务架构) 的设计方式,服务调用方与使用方完全隔离,调用模块外的能力不需要关注能力的提供者是谁。ServiceProvider 的核心设计思想也是这样的,目前服务间的调用协议采用接口的方式。当然,也可以兼容不通过接口下沉而是直接调用的情况。 <img src="https://oscimg.oschina.net/oscnet//2b415a4c5e28eb030692174056fbf876.jpeg" class="blog-img"> 服务提供方负责提供服务,不需要关心调用方是谁会在何时调用自己。 服务的使用方只关注服务本身,不需要关心这个服务是谁提供的,只需要只能服务能提供哪些能力即可。 例如上面的图片:拉拉需要使用录音的服务,小货则向外提供一个录音的服务,由TheRouter的ServiceProvider负责撮合。 <br> 4.1 服务使用方:拉拉 她无需关心,IRecordService 这个接口服务是谁提供的,他只需要知道自己需要使用这样的一个服务就行了。 注:如果没有提供服务的提供方,TheRouter.get() 可能返回 undefined TheRouter.get<irecordservice>(BaseConstant.CLASS_SERVICE)?.doRecord() <br> 4.2 服务提供方:小货 服务提供方需要声明一个提供服务的方法,用 @ServiceProvider 注解标记,并需要实现接口 IServiceProvider。 // 类名不限定,任意名字都行 // 所有的 ServiceProvider 必须实现 IServiceProvider 接口 // 多次添加重复serviceName,框架会保证安全,在编译时报错 @ServiceProvider({ serviceName: BaseConstant.CLASS_SERVICE, singleton: true }) export class CustomService implements IRecordService, IServiceProvider { doRecord(): void { } } <br> @ServiceProvider 参数释义 serviceName: 服务名 【必传】。 服务的唯一标识。如果重复,在编译期会直接报错。 singleton: 默认false【可选】。 服务提供方提供出的服务是否为单例。 <br> 五、动态化能力 Action 的设计 Action 本质是一个全局的系统回调,主要用于预埋的一系列操作,例如:弹窗、上传日志、清理缓存。 与 Android 系统自带的广播通知类似,你可以在任何地方声明动作与处理方式。并且所有 Action 都是可以被跟踪的,只要你愿意,可以在日志中将所有的动作调用栈输出,以方便调试使用,这样在一定程度上可以解决观察者模式带来的通病:无法追踪 Observable 的问题。 <br> 5.1 Action 使用 声明一个 Action: // action建议遵循一定的格式 const readonly ACTION = "therouter://action/xxx" // action既可以放在ServiceProvider里面,也可以单独放在任意类中,但不能是top-level函数,这一点与Android不同 // action函数允许有返回值,可以做耗时操作 // 多次添加重复action,每个action的方法都会执行,但最终只会返回优先级最高的方法的返回值 @Action({ action: ACTION }) public test(par: string): string { return "返回入参:" + par; } <br> 执行一个 Action: // action建议遵循一定的格式 const val ACTION = "therouter://action/xxx" // 如果执行了一个没有被声明的Action,则不会有任何动作 // 这里的"hello"字符串,是根据action定义时有一个入参,所以调用时需要传入这个参数 TheRouter.action<string>(ACTION, "hello").then((str) =&gt; { this.text = str; }) <br> @Action 参数释义 action: 事件名 【必传】。 当前函数需要响应的action。如果同一个action有多个函数订阅,会在响应时根据优先级决定先后顺序。 priority: 优先级(number类型),默认5【可选】。 数字越大,优先级越高。 <br> 5.2 客户端动态响应使用场景 如果仅客户端使用,常用的场景可能是:当用户执行某些操作(打开某个页面、H5点击某个按钮、动态页面配置的点击事件)时,将会自动触发,执行预埋的 Action 逻辑。 如果与服务端链路打通,这个能力其实是需要整个公司的配合,比如有一套类似智慧大脑的方案,可以基于客户端过去的一些埋点数据,智能推断出用户下一步要做的事情,然后通过长连接直接向客户端下发指令做某些事情。那么通过客户端预埋的页面跳转、弹窗、清缓存、退出登录等等操作,就可以通过服务端指令进行操作,则就是一套完整的动态化方案。 <img src="https://oscimg.oschina.net/oscnet//79f8e6cef031e34cfa80d4f329003662.png" class="blog-img"> <br> 六、从其他路由迁移至 TheRouter 6.1 迁移工具一键迁移? TheRouter 在 Android 项目上提供了图形化界面的迁移工具,可以一键从其他路由迁移到TheRouter。 鸿蒙当然也提供了相同的能力,你可以在插件市场搜索,直接安装。安装好以后,点击 IDE 顶部的 Tool 菜单,找到迁移工具。 <br> 6.2 与其他路由对比 <br> 功能 TheRouter HMRouter Navigation 具备三端高一致性 ✔️ ✖️ ✖️ 注解生成路由表 ✔️ ✔️ ✖️ 路由path支持正则表达式 ✔️ ✔️ ✖️ 指定拦截器 ✔️(四大拦截器可根据业务定制) ✔️ ✖️ 导出路由表 ✔️(路由文档支持添加注释描述) ✔️ ✖️ 支持跨模块调用 ✔️ ✔️ ✖️ 动态修改路由信息 ✔️ ✖️(未提供功能接口) ✔️(限制高,需提前定义,通过if/else修改实现) 远端路由表下发 ✔️ ✖️ ✖️ 多 Path 对应同一页面(低成本实现双端path统一) ✔️ ✖️ ✖️ 支持使用路由打开第三方SDK页面 ✔️ ✖️ ✖️ <br> 七、总结 <br> TheRouter 并不仅仅是一个小巧灵活的路由库,而是一整套 Android、iOS、Harmony 三端完整的移动端解决方案,对移动端开发者更友好,上手开发适应性更强。使用 TheRouter 能够解决几乎全部的模块化过程中会遇到的问题。 对于现有的路由框架,我们也在最大限度支持平滑迁移。你也可以在 Github issue 中提出需求,我们评估后会尽快支持,也欢迎任何人提供 Pull Requests。 <br> 更多问题请加群沟通: <br> <img src="https://oscimg.oschina.net/oscnet//58894fe2e65215c645807394c7428b38.png" class="blog-img"> <br> </string></irecordservice></string,>

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册