最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++與Lua交互原理實(shí)例詳解

 更新時(shí)間:2021年03月01日 16:13:20   作者:PHP開(kāi)發(fā)社區(qū)  
這篇文章主要介紹了C++與Lua交互原理實(shí)例詳解,有感興趣的同學(xué)可以研究下

首先,不同語(yǔ)言交互,我們一般把這種編程方式稱(chēng)為混合編程。開(kāi)發(fā)中為什么要多語(yǔ)言混合使用,只用c++不行嗎?答案是因?yàn)槟_本語(yǔ)言語(yǔ)法糖多使用方便、沙盒式安全機(jī)制使系統(tǒng)更穩(wěn)定、簡(jiǎn)單易學(xué)降低開(kāi)發(fā)成本等,那么,只用腳本不行嗎?那也是不合理的,因?yàn)榕c系統(tǒng)api的接口、計(jì)算密集性模塊的性能要求等是腳本語(yǔ)言不擅長(zhǎng)的,這一部份仍然需要c/c++來(lái)完成。因此,為了綜合各自的優(yōu)勢(shì),就出現(xiàn)了混合編程的需要。

那么,在一個(gè)程序的生命周期里,具體哪些部份c++寫(xiě),哪些部份是腳本寫(xiě)?它們的交互接口又在哪里?一般與系統(tǒng)緊密相關(guān)的,如程序啟動(dòng)、創(chuàng)建窗口及渲染器、事件循環(huán)分發(fā),各種窗口消息、網(wǎng)絡(luò)事件的接收分發(fā)等一般c++來(lái)做。而具體邏輯相關(guān)的,如消息和事件的處理器(事件驅(qū)動(dòng)),會(huì)根據(jù)傳入的參數(shù)及當(dāng)前狀態(tài)做出反應(yīng),包括改變腳本自身環(huán)境內(nèi)的變量,調(diào)用綁定的c函數(shù)從而修改c/c++端的變量等一般腳本來(lái)做。

然后,它們又是在哪里交互的,怎么交互的?簡(jiǎn)單點(diǎn)講就是維護(hù)了一個(gè)堆棧,需要交互的數(shù)據(jù)通過(guò)入棧,出棧操作來(lái)傳遞數(shù)據(jù)。而具體腳本語(yǔ)言的實(shí)現(xiàn)機(jī)制,一般來(lái)說(shuō)都會(huì)有一個(gè)編譯模塊、一個(gè)虛擬機(jī)(執(zhí)行)模塊、一套類(lèi)型實(shí)現(xiàn)及數(shù)據(jù)管理模塊,通常還會(huì)有一個(gè)供外部操作的接口,如lua c api,這個(gè)接口讓嵌入方得以操作腳本狀態(tài)(如訪(fǎng)問(wèn)變量、調(diào)用函數(shù)、管理內(nèi)存),實(shí)現(xiàn)交互。

最后,總結(jié)一下,所有程序最終都是以機(jī)器碼的形式被硬件CPU執(zhí)行,從這個(gè)角度去看,不同語(yǔ)言的代碼并沒(méi)有本質(zhì)區(qū)別,最終都是被編譯器編譯從二進(jìn)制機(jī)器碼,而所謂交互,就是在處理共享數(shù)據(jù)而已。

tolua工具的使用
cocos2dx c++與lua 綁定具體流程:使用的cocos版本是3.4,Mac環(huán)境,但Windows上和cocos的其它版本流程也是一樣。

修改cocos本身的類(lèi)接口綁定到Lua

具體步驟:

1,找到cocos自帶的綁定工具腳本文件genbindings.py,在cocos工程的frameworks/cocos2d-x/tools/tolua這個(gè)目錄下,把這個(gè)文件打開(kāi)。

2,在打開(kāi)的genbindings.py文件下面找到這么一段代碼:


在這里插入圖片描述

這里就是運(yùn)行這個(gè)腳本會(huì)自動(dòng)生成lua綁定代碼的所有對(duì)象和這些對(duì)象所在的目錄與綁定代碼生成的目的路徑,#是注釋?zhuān)ㄟ^(guò)它指定只生成修改過(guò)的模塊的綁定代碼。

3,運(yùn)行g(shù)enbindings.py,打開(kāi)命令行工具,cd到這個(gè)目錄,再在當(dāng)前目錄運(yùn)行這個(gè)腳本。(1,cd + tolua目錄路徑 2,./genbindings.py)

4,xcode重新編譯下c++代碼,綁定成功。

自定義類(lèi)綁定到Lua

1,寫(xiě)好自定義類(lèi),我們一般把這個(gè)類(lèi)放在Classes目錄,我自己項(xiàng)目的目錄如下:


在這里插入圖片描述

2,寫(xiě)好這個(gè)類(lèi)的.ini配置文件,copy其它的.ini配置,只需要改下類(lèi)名空間,路徑等,多個(gè)類(lèi)寫(xiě)一個(gè)配置里信息用空格隔開(kāi)。具體示意圖如下:
我的配置文件:


在這里插入圖片描述

配置文件主要修改地方:


在這里插入圖片描述

3,運(yùn)行g(shù)enbindings.py腳本,就會(huì)在指定目錄自動(dòng)生成自定義類(lèi)綁定到lua的代碼。

在這里插入圖片描述

4,最后是把生成的綁定代碼注冊(cè)到lua環(huán)境棧,如圖所示:


在這里插入圖片描述

cocos AppDelegate.cpp里的這個(gè)代碼完成的創(chuàng)建lua環(huán)境棧和注冊(cè):


在這里插入圖片描述

注意事項(xiàng)

1,自己新增的自定義類(lèi),打包到andriod上時(shí),需要修改安卓的打包配置,把新增的文件添加進(jìn)去(不光針對(duì)這里,所有打安卓包,新增的東西都是要加入到這個(gè)配置中才會(huì)拷貝)。示意圖如下:


在這里插入圖片描述
在這里插入圖片描述

2,mac終端中執(zhí)行g(shù)enbindings.py這個(gè)腳本,如果報(bào)“ImportError: No module named yaml”這個(gè)錯(cuò)誤,解決方式是:在終端中逐個(gè)輸入:以下3句命令,mac會(huì)自動(dòng)幫我們下載安裝這3個(gè)東東,安裝完畢就可以了。
在終端分別逐行輸入以下內(nèi)容:

sudo easy_install pip
sudo pip install PyYAML
sudo pip install Cheetah

到此這篇關(guān)于C++與Lua交互原理實(shí)例詳解的文章就介紹到這了,更多相關(guān)C++與Lua交互原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用devenv在命令行中編譯項(xiàng)目的方法

    使用devenv在命令行中編譯項(xiàng)目的方法

    下面小編就為大家分享一篇使用devenv在命令行中編譯項(xiàng)目的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 基于C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng)

    基于C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • socket多人聊天程序C語(yǔ)言版(二)

    socket多人聊天程序C語(yǔ)言版(二)

    這篇文章主要為大家詳細(xì)介紹了socket多人聊天程序C語(yǔ)言版第二篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • C語(yǔ)言指針用法總結(jié)

    C語(yǔ)言指針用法總結(jié)

    本文詳細(xì)講解了C語(yǔ)言指針用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • c++11&14-智能指針要點(diǎn)匯總

    c++11&14-智能指針要點(diǎn)匯總

    這篇文章主要介紹了c++11&14-智能指針的要點(diǎn),文中代碼非常詳細(xì),供大家學(xué)習(xí)和參考,感興趣的朋友可以了解下
    2020-06-06
  • OpenCV實(shí)現(xiàn)圖像膨脹

    OpenCV實(shí)現(xiàn)圖像膨脹

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)圖像膨脹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語(yǔ)言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能示例

    C語(yǔ)言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能示例

    這篇文章主要介紹了C語(yǔ)言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能,結(jié)合具體實(shí)例形式分析了C語(yǔ)言棧和隊(duì)列的定義及使用棧和隊(duì)列進(jìn)行回文檢測(cè)的操作技巧,需要的朋友可以參考下
    2017-06-06
  • GetChar緩存機(jī)制深入剖析

    GetChar緩存機(jī)制深入剖析

    以下是對(duì)GetChar緩存機(jī)制進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • C++深入淺出講解缺省參數(shù)

    C++深入淺出講解缺省參數(shù)

    所謂缺省參數(shù),顧名思義,就是在聲明函數(shù)的某個(gè)參數(shù)的時(shí)候?yàn)橹付ㄒ粋€(gè)默認(rèn)值,在調(diào)用該函數(shù)的時(shí)候如果采用該默認(rèn)值,你就無(wú)須指定該參數(shù)。缺省參數(shù)使用主要規(guī)則:調(diào)用時(shí)你只能從最后一個(gè)參數(shù)開(kāi)始進(jìn)行省略,換句話(huà)說(shuō),如果你要省略一個(gè)參數(shù),你必須省略它后面所有的參數(shù)
    2022-07-07
  • C語(yǔ)言實(shí)現(xiàn)三子棋

    C語(yǔ)言實(shí)現(xiàn)三子棋

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01

最新評(píng)論

特克斯县| 旬阳县| 绩溪县| 赞皇县| 永和县| 襄汾县| 民丰县| 南皮县| 德昌县| 清徐县| 特克斯县| 军事| 肥东县| 房产| 津市市| 华蓥市| 平阴县| 蓬溪县| 南澳县| 开原市| 邵阳县| 大埔区| 潞城市| 酉阳| 微山县| 邵阳市| 鲁山县| 石城县| 铁力市| 阿拉善盟| 木兰县| 宝丰县| 林甸县| 濮阳县| 满洲里市| 唐海县| 建水县| 乐至县| 富顺县| 米泉市| 九寨沟县|