cocos 通过 electron 打包成 exe 文件,实现通信问题

cocos 通过 electron 打包成 exe 文件,实现通信问题

在这里插入图片描述

首先,我使用的 cocos 版本是 2.4.12,遇到一个问题,是啥子呢,就是我要把用 cocos 开发出来的项目打包成一个 exe 可执行程序,使用的是 electron ,现在我有一个需求,就是在 cocos 中开发一个“退出”按钮,点击这个按钮的时候,关闭 exe 程序。

cocos关闭exe程序

首先需要明白一个问题,就是 cocos 里面开发的 “退出”按钮 隶属于 cocos 项目,与 electron 毫无关系;但是关闭 exe 可执行程序呢,是 electron 的功能,与 cocos 毫无关系;

但是现在我的需求是要把 cocos 和 electron 关联起来。

所以我的方案是:想办法,在 cocos 点击关闭按钮的时候,由 cocos 向 electron 发送一个消息,当 electron 收到 cocos 传递过来的消息的时候,则由 electron 主动关闭 exe 窗口,这样就实现了点击按钮关闭功能。

上面的方案可行吗?非常可行,亲测可行!

方案

我使用的是 Electron 的 IPC (Inter-Process Communication) 机制,也就是 ipcMainipcRenderer

首先在cocos部分,写一个按钮,绑定一个点击事件,这个步骤我就不详细说了, 主要是这个点击事件里面是什么,也就是说怎么给 electron 发送消息:

  // 关闭应用closeAppFunc() {window.ipcRenderer.send('close-app');}

其实就是上面这段代码,通过 ipcRenderer ,向 electron 发送一个 close-app 消息,当然 close-app 这个名字是自己起的,你叫啥都可以。

没了,这就是发送消息,window 是全局的,但是 window 上面其实是没有 ipcRenderer 的,先别急哈。

然后,就是修改 electron ,让它接收 cocos 发送过来的 close-app 消息。

首先我们在 electron 项目(electron-quick-start-exe)下面找到 main.js 文件,我们在 createWindow 方法里面,添加下面这段代码:

  ipcMain.on('close-app', () => {mainWindow.close();app.quit()})

这段代码的意思就是接收到 close-app 消息之后关闭窗体,当然,ipcMain 找不到,我们需在文件开头引入一下子:

const { ipcMain } = require('electron');

好,这样 electron 就可以了。

但是,上面在 cocos 里面发送消息的时候说了, window 里面并没有 ipcRenderer, 怎么办呢?没关系,我们在编译 cocos 文件之后,生成了一个 web-mobile 文件夹,在里面呢,有一个 index.html 文件,我们编辑这个文件,在他的 body 标签前面添加下面这段 js 代码:

<script type="text/javascript" >const { ipcRenderer } = require('electron');window.ipcRenderer = ipcRenderer;
</script>

OK,上面步骤完成之后,就可以打包了,打包完成就好使了!

注意,浏览器测试没用,必须打包成 exe 文件才可以用,浏览器测试会报错!!

electron 向 cocos 传递数据

上面说了一个通过 cocos 向 electron 传递数据,现在要说一下 electron 向 cocos 传递数据,啊哈哈哈哈!

为啥子说这个呢?因为我呢,还有一个需求,就是 打包后的 exe 可执行程序啊,需要读取当前文件夹下面的一个 json 文件,读取之后呢,需要在 cocos 程序中使用,你看这事儿闹的,这他妈的复杂,没关系,小意思!

方案

首先呢,我是这样想的,我在 cocos 一加载完啊,就给 electron 发送一个消息,告诉 electron 说,你得给我加载这个 json 文件啦!和上面的通信方式是一样的哈:

window.ipcRenderer.send('get-config');

你看,就一句代码,告诉 electron 给我加载文件!

然后 electron 收到 cocos 传递的消息之后呢,就可以加载这个 json 文件了,加载完文件之后,通过 reply 在把读取到的数据返回给 cocos :

  ipcMain.on('get-config', (event) => {const p = path.resolve('./')// 读取当前文件加下 wjw.json 文件const resourcesPath = path.join(p, 'wjw.json');// 开始读文件fs.readFile(resourcesPath, 'utf8', (err, data) => {  if (err) throw err;  // 如果报错就抛出错误console.log(data);  // 打印一下数据event.reply('wjw-data', data);  // 把数据返回给 cocos});})

然后就简单了,cocos 里面接收一下就可以啦:

window.ipcRenderer.on('wjw-data', (event, data) => {// 把数据放进缓存cc.sys.localStorage.setItem('wjwData', data);// 从缓存里面读一下let value = cc.sys.localStorage.getItem('wjwData');// 打印一下缓存取出来的数据console.log('wjw-data 缓存读取的数据:', JSON.parse(value));
});

就这么简单!完成!

注意:依旧是需要打包测试,浏览器测试会报错哈!!谨记!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++算法】BFS解决多源最短路问题相关经典算法题

1.01矩阵 既然本章是BFS解决多源最短路问题&#xff0c;也就是说有若干个起点&#xff0c;那我们就可以暴力一点&#xff0c;直接把多源最短路径问题转化成若干个单源最短路径问题&#xff0c;然后将每次的步数比较一下&#xff0c;取到最短的就是最短路径的结果&#xff0c;这…

arcgis 10.6 工具栏操作error 001143 后台服务器抛出异常

arcgis 10.6 工具栏操作error 001143 后台服务器抛出异常 环境 win10arcgis 10.6 问题 执行定义投影要素转线出现 Error: 001143:后台服务器抛出异常&#xff08;差点重装10.6&#xff09; 如下图所示&#xff1a; 解决方法 通过在菜单工具条上单击地理处理 > 地理处…

设计模式使用(成本扣除)

前言 名词解释 基础名词 订单金额&#xff1a;用户下单时支付的金额&#xff0c;这个最好理解 产品分成&#xff1a;也就是跟其他人合做以后我方能分到的金额&#xff0c;举个例子&#xff0c;比如用户订单金额是 100 块&#xff0c;我方的分成是 80%&#xff0c;那么也就是…

OceanMind海睿思通过上海数交所数商认证,提供高质量数据治理和数据咨询服务

近日&#xff0c;中新赛克海睿思成功通过上海数据交易所的数商认证&#xff0c;获得上海数据交易所颁发的“数据产品开发服务商”、“数据治理服务商”和“数据咨询服务商”三大证书。 作为由深圳市创新投资集团有限公司投资控股的高新技术企业&#xff0c;国家级专精特新“小巨…

如何通过OpenHarmony的音频模块实现录音变速功能?

简介 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;是由开放原子开源基金会孵化及运营的开源项目&#xff0c;是面向全场景、全连接、全智能时代的智能物联网操作系统。 多媒体子系统是OpenHarmony系统中的核心子系统&#xff0c;为系统提供了相机、…

2024-05-24 问AI: 在深度学习中,什么是L1 正则化和L2 正则化?

文心一言 在深度学习和机器学习中&#xff0c;正则化是一种用于防止模型过拟合的技术。它通过向损失函数添加一个惩罚项来实现&#xff0c;这个惩罚项与模型的复杂度有关。正则化项可以看作是对模型参数的约束&#xff0c;使得模型在训练时不仅关注于最小化训练误差&#xff0…

Java入门基础学习笔记43——包

什么是包&#xff1f; 包是用来分门别类的管理各种不同程序的&#xff0c;类似文件夹&#xff0c;建包有利于程序的管理和维护。 建包的语法规则&#xff1a; package cn.ensource.javabean;public class Car() {} 在自己的程序中调用其他包下的程序的注意事项&#xff1a; 1…

动手学深度学习——层和块

1. 层 层是一个将输入数据转换为输出数据的神经网络组件。每个层都会对输入数据进行一定的操作&#xff0c;例如线性变换、非线性激活函数等&#xff0c;以产生输出数据。 torch.nn模块提供了各种预定义的层&#xff0c;如线性层、卷积层、池化层等&#xff0c; nn.Linear&a…

BLE学习笔记(0.0) —— 基础概念(0)

前言 &#xff08;1&#xff09;本章节主要是对BLE技术进行简单的介绍&#xff0c;熟悉蓝牙技术的发展过程&#xff0c;了解相关术语方便后续的学习。 &#xff08;2&#xff09;为了防止单篇博客太长以至于看不下去&#xff0c;因此我基础概念章节分为两篇来写。 &#xff08;…

直播回放| 机器人任务挑战赛线上培训资料合集

大赛培训回顾 5月22日&#xff0c;卓翼飞思实验室为全国各赛区精心组织的机器人任务挑战赛&#xff08;无人协同系统&#xff09;线上培训第三期顺利落下帷幕&#xff0c;吸引300余人参与。本次培训主要针对仿真平台的基本使用&#xff0c;从仿真平台获取激光雷达/视觉数据&am…

Mysql教程(0):学习框架

1、Mysql简介 MySQL 是一个开放源代码的、免费的关系型数据库管理系统。在 Web 开发领域&#xff0c;MySQL 是最流行、使用最广泛的关系数据库。MySql 分为社区版和商业版&#xff0c;社区版完全免费&#xff0c;并且几乎能满足全部的使用场景。由于 MySQL 是开源的&#xff0…

选择排序,改进冒泡排序,快速排序的查找和计数排序

简单选择排序 数据结构:单链表 实现方法:n为链表长度, 第1趟先选出1到n-1个元素中的最小值和0号元素交换, 第2趟从2到n-1号元素选出最小值和1号元素交换, … 第n-2趟从n-2到n-1号元素中选出最小值和n-2号元素交换. 第n-1趟n-1号元素即为最小值。比较结束。 代码:…

1075: 求最小生成树(Prim算法)

解法&#xff1a; 总结起来&#xff0c;Prim算法的核心思想是从一个顶点开始&#xff0c;一步一步地选择与当前最小生成树相邻的且权值最小的边&#xff0c;直到覆盖所有的顶点&#xff0c;形成一个最小生成树。 #include<iostream> #include<vector> using names…

算法-跳马

bfs类的应用题。 解法&#xff1a; 每一个点都可能作为汇集的那个点&#xff0c;因此采用遍历的方式&#xff0c;对每个点进行处理&#xff0c;得出每个点的“所有马跳到本点的最小步数和“&#xff0c;取最小值即可。 逻辑1&#xff1a;以该点作为源点出发&#xff0c;求处…

springboot基于Web前端技术的java养老院管理系统_utbl7

3.普通用户模块包括&#xff1a;普通会员的注册、养老院客房查询、养老院留言查询、预约老人基本信息登记、选择房间、用户缴费的功能。 4.数据信息能够及时进行动态更新&#xff0c;增删&#xff0c;用户搜素方便&#xff0c;使用户可以直接浏览相关信息&#xff0c;要考虑便于…

Vue3实战笔记(35)—集成炫酷的粒子特效

文章目录 前言一、vue3使用tsparticles二、使用步骤总结 前言 学习一个有趣炫酷的玩意开心一下。 tsparticles&#xff0c;可以方便的实现各种粒子特效。支持的语言框架也是相当的丰富. 官网&#xff1a;https://particles.js.org/ 一、vue3使用tsparticles 先来个vue3使用…

Go 语言逃逸分析:内存管理的关键

文章目录 前言1 逃逸分析是什么&#xff1f;2 逃逸分析的基本思想是什么&#xff1f;3 逃逸分析的分配原则是什么&#xff1f;4 如何进行逃逸分析&#xff1f;5 逃逸分析案例5.1 变量在函数外存在引用5.2 引用类型的逃逸5.3 闭包捕获变量5.4 变量占用内存较大 6 变量会逃逸到堆…

代码随想录训练营打卡第36天:动态规划解决子序列问题

1.300最长递增子序列 1.问题描述 找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。 2.问题转换 从nums[0...i]的最长的递增的子序列 3.解题思路 每一个位置的n…

经济学问题

问题1 1916年&#xff0c;福特汽车公司以440美元的价格生产了50万辆T型福特汽车。该公司当年盈利6000万美元。亨利福特告诉一位报纸记者&#xff0c;他打算把T型车的价格降至360美元&#xff0c;他希望在这个价格上能卖出80万辆汽车。福特说&#xff1a;“每辆车的利润减少&am…

Flutter 中的 CupertinoPicker 小部件:全面指南

Flutter 中的 CupertinoPicker 小部件&#xff1a;全面指南 在Flutter中&#xff0c;CupertinoPicker是一个用于创建iOS风格的选择器的组件&#xff0c;它允许用户通过滚动来选择一个值。CupertinoPicker可以用于选择日期、时间或者任何可枚举的值。本文将详细介绍CupertinoPi…