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

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));
});

就这么简单!完成!

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

相关文章:

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

cocos 通过 electron 打包成 exe 文件&#xff0c;实现通信问题 首先&#xff0c;我使用的 cocos 版本是 2.4.12&#xff0c;遇到一个问题&#xff0c;是啥子呢&#xff0c;就是我要把用 cocos 开发出来的项目打包成一个 exe 可执行程序&#xff0c;使用的是 electron &#xf…...

python中pow是什么意思

pow()方法返回xy&#xff08;x的y次方&#xff09;的值。 语法 以下是math模块pow()方法的语法&#xff1a; import math math.pow( x, y ) 内置的pow()方法 pow(x, y[, z]) 函数是计算x的y次方&#xff0c;如果z在存在&#xff0c;则再对结果进行取模&#xff0c;其结果等效…...

Go语言数据库框架 — Gorm

Go入门之Gorm 框架_go gorm-CSDN博客 https://zhuanlan.zhihu.com/p/677057361 一、简介 Gorm框使用ORM技术&#xff0c;将对象(O)和关系数据库(R)之间的映射(M)抽象出来&#xff0c;开发者通过操作对象的方式操作数据库&#xff0c;不需要直接处理SQL语句&#xff0c;降低了…...

Python库之PyQuery的高级用法深度解析

Python库之PyQuery的高级用法深度解析 引言 PyQuery是一个强大的Python库&#xff0c;它提供了类似于jQuery的语法来解析和操作HTML和XML文档。虽然PyQuery的基本用法已经相当直观&#xff0c;但本文将深入探讨一些高级用法&#xff0c;帮助开发者更高效地处理复杂的HTML文档…...

「架构」单元测试及运用

在参与管理和研发软件项目的过程中,单元测试的实际运用对于确保最终产品的质量至关重要。以下是一些实际运用的案例和说明。 静态测试的实际运用 在TechCorp的电子商务平台项目中,静态测试作为代码质量保证的第一道防线。开发团队在编写代码的同时,使用SonarQube等静态代码…...

C# 数组/集合排序

一&#xff1a;基础类型集合排序 /// <summary> /// 排序 /// </summary> /// <param name"isReverse">顺序是否取反</param> public static void Sort<T>(this IList<T> array, bool isReverse false)where T : IComparable …...

HDRnet

local feature and global feature 在这里插入图片描述 Local features and Global features in Image Local feature also known as local descriptors, are distinct, informative characteristics of an image or video frame that are used in computer vision and image…...

【ArcGISPro】3.1.5下载和安装教程

下载教程 arcgis下载地址&#xff1a;Трекер (rutracker.net) 点击磁力链下载弹出对应的软件进行下载 ArcGISPro3.1新特性 ArcGIS Pro 3.1是ArcGIS Pro的最新版本&#xff0c;它引入了一些新的特性和功能&#xff0c;以提高用户的工作效率和数据分析能力。以下是ArcGIS…...

理解多线程看这一篇就够了

一、基本概念与关系 程序 程序是含有指令和数据的文件&#xff0c;静态地存储在磁盘等存储设备上。它是软件的实体&#xff0c;但未被激活。 进程 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位。当程序被操作系统加载并执行时&#xff0c;就成为一个进程&a…...

解释“this”的工作原理,原型继承如何工作,以及如何实现手写JS继承。还包括Array对象自带的方法列举,以及如何使用闭包。

1:"this"的工作原理: this 关键字指向当前执行上下文的对象,也就是当前函数被调用时所在的对象。this 的值取决于函数的调用方式,不同的调用方式会导致 this 指向不同的对象:作为对象的方法调用,this 指向该对象作为普通函数调用,this 指向全局对象(浏览器中是 wind…...

汇智知了堂实力展示:四川农业大学Python爬虫实训圆满结束

近日&#xff0c;汇智知了堂在四川农业大学举办的为期五天的校内综合项目实训活动已圆满结束。本次实训聚焦Python爬虫技术&#xff0c;旨在提升学生的编程能力和数据分析能力&#xff0c;为学生未来的职业发展打下坚实的基础。 作为一家在IT教育行业享有盛誉的机构&#xff…...

2024下半年软考报名人数较去年减少,仅52.77万

2024下半年软考报名人数 2024年上半年软考考试共计报考52.77万人&#xff0c;其中&#xff0c;初级资格5.12万人、中级资格24.37万人、高级资格23.28万人。 根据往年报名人数&#xff0c;本次考试人数是减少了的&#xff0c;原因分析如下&#xff1a; 1、原来报名热门专业系…...

【前端常见面试题整理】

开放性的题目 自我介绍 突出学习能力 我想换工作的主要原因是 介绍项目 平时是如何学习前端开发的 主要就是两个途径&#xff0c;一个是查阅官方文档&#xff0c;然后就是在网上查找技术资料或者视频去学习。平时没事的时候也会看看github&#xff0c;同时关注一些社区和IT网…...

Java final关键字

可以修饰类、属性、方法和局部变量。 何时使用&#xff1a; 1、不希望某个类被继承&#xff0c;用final修饰该类。 2、不希望父类的某个方法被子类覆盖/重写&#xff0c;用final修饰该方法。 3、不希望类的某个属性的值被修改&#xff0c;用final修饰该属性。 4、不希望某…...

半个月获邀请函|在读博士公派新加坡南洋理工大学联合培养

J同学计划先申报CSC联培博士&#xff0c;如若获批&#xff0c;再走本校的联培资助项目。我们仅用半个月时间&#xff0c;就为其申请到新加坡南洋理工大学&#xff0c;因导师接收名额有限制&#xff0c;其又热心推荐了另一位指导导师&#xff0c;最终J同学如愿获得学校资助出国联…...

c++移动构造和赋值的样例

#include <iostream>class MyResource { public:// 默认构造函数MyResource(size_t size 0) : m_size(size), m_data(size ? new int[size] : nullptr) {std::cout << "Default constructor called\n";}// 析构函数~MyResource() {delete[] m_data;std…...

静态测试---基于WorkList的活跃变量分析

本文主要用于记录在活跃变量分析实验中的报错及解决&#xff0c;涉及静态测试的详细原理内容较少&#xff0c;编译运行底层逻辑偏多。 一、实验要求 1&#xff09;使用llvm基于框架实现一个基于WorkList的活跃变量分析demo。变量在某个程序点有两种状态&#xff0c;live 或 dea…...

Oracle 证书的重要性

随着信息技术的飞速发展&#xff0c;数据库管理已成为企业运营中不可或缺的一部分。Oracle作为全球领先的数据库管理系统提供商&#xff0c;其Oracle Certified Professional&#xff08;OCP&#xff09;认证已成为数据库管理员和开发人员追求的专业认证之一。本文将深入探讨Or…...

【Go专家编程——并发控制——Mutex】

1.Mutex 互斥锁是并发程序中对共享资源进行访问控制的主要手段&#xff0c;对此Go语言提供了Mutex&#xff0c;对外暴露Lock()和Unlock两个方法&#xff0c;分别用于加锁和解锁。 1.1 Mutex的数据结构 源码如下&#xff1a; type Mutex struct{state int32//代表互斥锁的状…...

SRE视角下的DevOps构建之道

引言&#xff1a; 随着数字化时代的飞速发展&#xff0c;软件成为了企业竞争力的核心。为了更高效地交付高质量的软件&#xff0c;DevOps&#xff08;Development和Operations的组合&#xff09;作为一种文化、实践和工具集的集合&#xff0c;逐渐成为了行业内的热门话题。然而…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...