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.pswp.cn/bicheng/14832.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14832.shtml
英文地址,請注明出處:http://en.pswp.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…