electron如何和cocos通信

通信这块,你查找资料会有很多,但是,都是一块一块的,只有自己亲自动手,你才会遇到各种问题。

在这里,我将个人研究运行后的路径发布如下,旨在能帮助更多的人节约时间。里面的各个字段的意义,百度查一下即可了解。

1.index.js

/*

* @Author: xhd

* @Date: 2024-10-19 17:39:24

* @FilePath: \dmyxToWin\index.js

* @LastEditTime: 2024-10-20 13:58:15

* @Description: Do not edit

*/

// app模块控制应用程序的事件生命周期。

// BrowserWindow模块创建和管理应用程序窗口。

const { app, BrowserWindow, ipcMain } = require("electron");

const path = require("path"); // 添加这行

// 保持一个对于 window 对象的全局引用,如果你不这样做,

let mainWindow;

/** 创建窗口 */

const createWindow = () => {

mainWindow = new BrowserWindow({

width: 1920,

height: 1080,

autoHideMenuBar: true,

resizable: false, // true缩放 false不能缩放

title: "游戏名称",

minimizable: false, // 窗口是否可以最小化

maximizable: false, // 窗口是否可以最大化

webPreferences: {

nodeIntegration: false, // 改为 false

contextIsolation: true, // 改为 true

preload: path.join(__dirname, "preload.js"),

},

});

// 加载 index.html

mainWindow.loadFile("web-mobile/index.html");

mainWindow.on("close", (e) => {

e.preventDefault();

if (mainWindow && mainWindow.webContents) {

console.log("Attempting to send app-close event to renderer");

mainWindow.webContents.send("app-close");

console.log("Sent app-close event to renderer");

// 添加一个超时,给渲染进程一些时间来响应

setTimeout(() => {

console.log("Timeout reached, forcing app to quit");

mainWindow.destroy();

app.quit();

}, 2000); // 5秒后强制退出

} else {

console.log("mainWindow or webContents is not available");

app.quit();

}

});

// 添加这个监听器来查看是否收到了 quit-app 消息

ipcMain.on("quit-app", () => {

console.log("Received quit-app event from renderer");

if (mainWindow) {

mainWindow.destroy();

}

app.quit();

});

// 添加这行来打开开发者工具

mainWindow.webContents.openDevTools();

};

// 这段程序将会在 Electron 结束初始化和创建浏览器窗口的时候调用

// 部分 API 在 ready 事件触发后才能使用。

app.whenReady().then(createWindow);

// 当所有窗口都被关闭的时候退出程序。

app.on("window-all-closed", () => {

if (process.platform !== "darwin") {

app.quit();

}

});

app.on("activate", () => {

if (BrowserWindow.getAllWindows().length === 0) {

createWindow();

}

});

2.preload.js

/*

* @Author: xhd

* @Date: 2024-10-20 10:08:01

* @FilePath: \dmyxToWin\preload.js

* @LastEditTime: 2024-10-20 13:54:24

* @Description: Do not edit

*/

const { contextBridge, ipcRenderer } = require("electron");

console.log("Preload script is running");

contextBridge.exposeInMainWorld("electron", {

onAppClose: (callback) => {

console.log("Setting up onAppClose listener");

ipcRenderer.on("app-close", (...args) => {

console.log("Received app-close event in preload", args);

callback(...args);

});

},

quitApp: () => {

console.log("Calling quitApp from preload");

ipcRenderer.send("quit-app");

},

});

console.log("Electron API exposed to renderer");

3.写一个bat方便一键执行,内容为

cnpm run-script package

4.提交git,更加.gitignore排除掉不需要提交的内容

/web-mobile/

/debug/

/release/

npm-debug.log

*.log

.DS_Store

/node_modules/

/*/node_modules/

5.cocos要监听消息

window['electron'].onAppClose((event) => {

console.log('Received app-close event in Cocos');

App.log.logBusiness('退出游戏', event);

// 执行您的清理操作

// to do exit

// 清理完成后,通知 Electron 可以退出了

console.log('Cocos cleanup done, sending quit-app event');

window['electron'].quitApp();

});

5.说下我这里实现的内容,点击关闭窗口,通知cocos做退出操作。

相关推荐
海盗1234几秒前
Web前端开发工具和依赖安装
前端
小何学计算机几秒前
Nginx配置基于端口的 Web 服务器
服务器·前端·nginx
网络研究院9 分钟前
新工具可绕过 Google Chrome 的新 Cookie 加密系统
前端·chrome·系统·漏洞·加密·绕过
x原力觉醒1 小时前
uniapp跨域问题,在开发环境中配置
javascript·vue.js·uni-app
理想不理想v1 小时前
【问答】浏览器如何编译前端代码?
前端·javascript·css·html
风清云淡_A1 小时前
react18中redux-saga实战系统登录功能及阻塞与非阻塞的性能优化
前端·react.js
偷光1 小时前
React 中使用 Echarts
前端·react.js·echarts
Luckyfif1 小时前
Webpack 是什么? 解决了什么问题? 核心流程是什么?
前端·webpack·node.js
王哲晓1 小时前
第十五章 Vue工程化开发及Vue CLI脚手架
前端·javascript·vue.js
揽月凡尘1 小时前
typescript webpack 库打包发布
javascript·webpack·typescript