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

news2024/11/26 10:37:57

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.coloradmin.cn/o/1688977.html

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

相关文章

ArkUI-X开发指南:【SDK配置和构建说明】

ArkUI-X SDK配置和构建说明 ArkUI-X SDK是ArkUI-X开源项目的编译产物&#xff0c;可将ArkUI-X SDK集成到现有Android和iOS应用工程中&#xff0c;使开发者基于一套ArkTS主代码&#xff0c;就可以构建支持多平台的精美、高性能应用。SDK内容包含ArkUI跨平台运行时&#xff0c;组…

Java期末复习指南(1):知识点总结+思维导图,考试速成!

&#x1f516;面向对象 &#x1f4d6; Java作为面向对象的编程语言&#xff0c;我们首先必须要了解类和对象的概念&#xff0c;本章的所有内容和知识都是围绕类和对象展开的&#xff01; ▐ 思维导图1 ▐ 类和对象的概念 • 简单来说&#xff0c;类就是对具有相同特征的一类事…

多线程、进程、线程五种状态、synchronized、volatile、Lock、CAS、死锁、ThreadLocal

1、并发编程 并发编程三要素 原子性&#xff1a;只一个操作要么全部成功&#xff0c;要么全部失败可见性&#xff1a;一个线程对共享变量的修改&#xff0c;其他线程能够立刻看到有序性&#xff1a;程序执行的顺序按照代码的先后顺序执行 synchronized&#xff0c;Lock解决原…

【HUST】信道编码|基于LDPC码的物理层安全编码方案概述

本文对方案的总结是靠 Kimi 阅读相关论文后生成的&#xff0c;我只看了标题和摘要感觉确实是这么回事&#xff0c;并没有阅读原文。 行文逻辑&#xff1a;是我自己设定的&#xff0c;但我并不是这个研究领域的&#xff0c;所以如果章节划分时有问题&#xff0c;期待指出&#x…

实验二-基于FPGA的VGA协议实现

目录 一、VGA介绍 原理 特征 二.VGA显示字符 三.VGA显示彩色条纹 四.总结 参考 任务要求&#xff1a; 1. 深入了解VGA协议&#xff0c;理解不同显示模式下的VGA控制时序参数&#xff08;行频、场频、水平/垂直同步时钟周期、显示后沿/前沿等概念和计算方式&#xff09;&…

蓝熊OZON数据分析,蓝熊OZON选品平台

在跨境电商的浪潮中&#xff0c;数据分析与选品策略成为了决定企业成功与否的关键因素。蓝熊OZON作为一家专注于跨境电商数据分析与选品平台&#xff0c;凭借其精准的数据分析能力与独特的选品模式&#xff0c;为众多电商企业提供了强有力的支持。接下来看看。 免费体验OZON选品…

别对我动心短视频:成都鼎茂宏升文化传媒公司

别对我动心短视频&#xff1a;时代的爱情哲学与心理探索 在短视频的海洋里&#xff0c;"别对我动心"这样的标题&#xff0c;如同一颗石子投入平静的湖面&#xff0c;激起了层层涟漪。它不仅仅是对一段情感的拒绝&#xff0c;更是一种现代人情感态度的表达&#xff0…

Go微服务开发框架DMicro的设计思路

DMicro是一个基于Go语言开发的微服务开发框架&#xff0c;旨在简化微服务架构的开发、部署和运维过程。DMicro的设计思路主要围绕以下几个方面展开&#xff1a; 简化微服务开发流程 DMicro通过提供一套简洁的API和工具&#xff0c;使得开发者可以快速搭建微服务应用。它支持服…

Java基础的语法---String

Java的String类是不可变的&#xff0c;意味着一旦创建&#xff0c;其值就不能被改变。String类提供了丰富的API来操作字符串。 以下是一些常用的方法&#xff1a; 构造方法&#xff1a; 有以下几种常见的&#xff1a; public class stringlearn {public static void main(S…

群晖NAS使用Docker部署WPS Office结 合内网穿透实现远程编辑本地文档

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本&#xff0c;通过…

父进程等待子进程退出

一、 为什么要等待子进程退出&#xff1f; 等待子进程退出是为了确保父进程能够在子进程执行完毕后继续执行或者处理子进程的结果。在许多情况下&#xff0c;父进程需要等待子进程完成后才能继续执行&#xff0c;以确保正确的执行顺序和结果。 以下是一些等待子进程退出的主要…

chessbase的中文语言strings文件比较与生成工具

请支持我的店铺tao 宝 王后兵 店 把chessbase17或fritz19根目录&#xff08;如C:\Program Files\ChessBase\CBase17&#xff09;的messages文件夹复制到本py文件所在的文件夹&#xff0c;运行本py文件可以生成新的Chinese strings文件。 strings2.py """strin…

第52期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

Vitis HLS 学习笔记--基本指针和算术指针

目录 1. 简介 2. 基本指针 3. 算术指针 4. 疑点解答 4.1 疑点1 4.2 疑点2 5. 总结 1. 简介 在 C/C 语言中&#xff0c;指针被广泛用来表示内存中的地址信息&#xff0c;它们是理解和使用这些语言的核心概念之一。然而&#xff0c;在 Vitis HLS 中&#xff0c;指针的使用…

Unity射击游戏开发教程:(20)增加护盾强度

在本文中,我们将增强护盾,使其在受到超过 1 次攻击后才会被禁用。 Player 脚本具有 Shield PowerUp 方法,我们需要调整盾牌在被摧毁之前可以承受的数量,因此我们将声明一个 int 变量来设置盾牌可以承受的击中数量。

【大模型】fineturn Q-wen

github上下载qwen1_5源码 修改finetun.sh 然后在路径qwen1_5/examples/sft下修改finetun.sh, 内容如下 #!/bin/bash export CUDA_DEVICE_MAX_CONNECTIONS1 DIRpwd# Guide: # This script supports distributed training on multi-gpu workers (as well as single-worker trai…

大数据Hadoop之-工具HIVE(一)

大数据Hadoop之——数据仓库Hive HIVE介绍Hive是基于Hadoop的一个数据仓库(Data Aarehouse,简称数仓、DW),可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。是用于存储、分析、报告的数据系统。 在Hadoop生态系统中,HDFS用于存储数据,Yarn用于资源管理…

WSL调用docker

WSL&#xff08;windows subsystem linux&#xff09;是window系统的原生linux子系统&#xff0c;用于代码开发很方便。 希望在wsl里面运行docker&#xff0c;首先要安装docker在WSL中使用&#xff0c;大部分人的第一想法肯定是用以下命令行安装&#xff08;个人不推荐&#x…

大语言模型本地部署与使用_ollama_open-webui

概述 本文主要记录如何使用ollama运行开源的大语言模型如llama3等&#xff0c;以及如何使用open-webui进行交互。 ollama支持MacOS、Linux、Windows等操作系统&#xff0c;这里主要以Linux和Windows为主&#xff0c;讲述如何在本地运行大语言模型。 一 安装ollama 1.1 Wind…

centos 8.5 yum 更换阿里云源

在CentOS 8上更换为阿里云源,步骤操作&#xff1a; 1 备份当前的yum源配置文件 cp -a /etc/yum.repos.d /etc/yum.repos.d.backup 2 清理原来 官方默认源 rm -rf /etc/yum.repos.d/*.repo 3 下载阿里云CentOS 8的yum源配置文件 curl -o /etc/yum.repos.d/CentOS-Base.rep…