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做退出操作。

相关推荐
hackeroink1 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
迷雾漫步者3 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-3 小时前
验证码机制
前端·后端
燃先生._.4 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖5 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235245 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
m0_748240256 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar6 小时前
纯前端实现更新检测
开发语言·前端·javascript
寻找沙漠的人7 小时前
前端知识补充—CSS
前端·css