• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            colorful

            zc qq:1337220912

             

            Quick-Cocos2d-x 集成 Google protobuf 方法

            http://cn.cocos2d-x.org/tutorial/show?id=506

            本文將向您介紹Quick-Cocos2d-x集成google protobuf的方法。  
             
            第一步   需要最新的protobuf 類(lèi)庫(kù)和解析程序。 
            下載地址:https://github.com/sean-lin/protoc-gen-lua
             
            git clone https://github.com/sean-lin/protoc-gen-lua.git 到任意的一個(gè)地方
             

            然后,可以得到重要的兩個(gè)目錄

            1
            2
            protoc-gen-lua/plugin/ 
            protoc-gen-lua/protobuf/
             
            第二步, 需要使用protoc —lua_out=. 這種方法, 將我們自己的*.proto 的文件解析成lua文件

            plugin目錄是提供將buffer 文件解析成lua 版本的類(lèi)庫(kù), 需要python 支持。  如果已經(jīng)編譯了google 官方的protoc 那個(gè)程序, 只需要在系統(tǒng)PATH環(huán)境變量總追加plugin目錄就好:

            1
            export PATH={protoc-gen-lua DIR }/plugin:$PATH
             
            關(guān)于protoc的編譯另請(qǐng)google .
             
            如果解析不出lua文件來(lái), 可以手動(dòng)志信一下plugin/protoc-gen-lua的程序, 他應(yīng)該是+x 的權(quán)限(chmod +x plugin/protoc-gen-lua)
             
            細(xì)節(jié)的安裝步驟可以參考 https://code.google.com/p/protoc-gen-lua/
             
            第三步 , 將protobuf 集成到quick 中
            protoc-gen-lua/protobuf/ 目錄就是要編譯到quick-cocos2d-x目錄里面的部分。 
             
            現(xiàn)在, 我們只需要 protoc-gen-lua/protobuf/pb.c 這個(gè)文件 
             

            先確定自己的quick-cocos2d-x lua擴(kuò)展目錄:

            1
            /quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/
             
            所有l(wèi)ua 的c/c++現(xiàn)成擴(kuò)展,都可以直接放到這里。 
              
            將pb.c這個(gè)文件復(fù)制到 lua_extension目錄下, 最好獨(dú)立一個(gè)目錄, 免得擴(kuò)展多了亂。 
              

            這是我的目錄結(jié)構(gòu):

            1
            ./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c
              
            然后開(kāi)始修改擴(kuò)展程序配置文件, lua_extensions.c
             

            路徑為:

            1
            ./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/lua_extensions.c
             

            目前是一個(gè)不足60行的小文件, 我打算全部貼進(jìn)來(lái):

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            58
            59
            60
            61
            62
            63
            64
            65
            66
            67
            68
            69
            70
            #include "lua_extensions.h" 
               
            #if __cplusplus 
            extern "C"
            #endif 
                
            // cjson 
            #include "cjson/lua_cjson.h" 
                
                
            // zlib 
            #include "zlib/lua_zlib.h" 
                
                
            // lpack 
            #include "lpack/lpack.h" 
                
                
            // socket 
            #include "socket/luasocket.h" 
            #include "socket/mime.h" 
            #include "socket/socket_scripts.h" 
                
                
            // filesystem 
            #include "filesystem/lfs.h" 
                
                
            // lsqlite3 
            #include "lsqlite3/lsqlite3.h" 
                
                
            #include "protobuf/pb.c"   //引用protobuf 庫(kù)文件 
                
                
            static luaL_Reg luax_exts[] = { 
                 {"cjson", luaopen_cjson_safe}, 
                 {"zlib", luaopen_zlib}, 
                 {"pack", luaopen_pack}, 
                 {"socket.core", luaopen_socket_core}, 
                 {"mime.core", luaopen_mime_core}, 
                 {"lfs", luaopen_lfs}, 
                 {"lsqlite3", luaopen_lsqlite3}, 
                 {NULL, NULL} 
            }; 
                
                
            void luaopen_lua_extensions(lua_State *L) 
                 // load extensions 
                 luaL_Reg* lib = luax_exts; 
                 lua_getglobal(L, "package"); 
                 lua_getfield(L, -1, "preload"); 
                 for (; lib->func; lib++) 
                 
                     lua_pushcfunction(L, lib->func); 
                     lua_setfield(L, -2, lib->name); 
                 
                 lua_pop(L, 2); 
                
                
                 // load extensions script 
                 luaopen_socket_scripts(L); 
                 luaopen_pb(L);   //這是加入的protobuf 擴(kuò)展注冊(cè)名 
                
                
            #if __cplusplus 
            } // extern "C" 
            #endif
            至此 , protobuf 擴(kuò)展部分就算擴(kuò)展完成了。 
             
            確認(rèn)是否成功支持 , 可以在quick 項(xiàng)目最先被調(diào)用的lua文件中追加 require "pb" 做測(cè)試。 
             
            *但這時(shí)候通過(guò)protoc 轉(zhuǎn)碼后得到的lua文件還不能被解析。 
             
            第四步 從項(xiàng)目中包含protobuf的 lua庫(kù)
            protoc-gen-lua/protobuf/這個(gè)目錄下面, 還有大量的.lua文件, 是用來(lái)支持proto轉(zhuǎn)碼后的文件解析調(diào)用的。 不能少了這些文件。 
             
            復(fù)制protoc-gen-lua/protobuf文件夾 到項(xiàng)目中 scripts目錄下。  
              

            目錄結(jié)構(gòu)應(yīng)該是這樣的:

            1
            [PROJECT]/scripts/protobuf/*.lua
             
            然后, 需要告訴框架,從哪里可以引用到它。 
             

            修改main.lua 在require("appxxxxxx") 上面 , 加入下面的代碼:

            1
            package.path = package.path .. ";./protobuf/?.lua;./scripts/protobuf/?.lua;"
             
            這個(gè)方法, 能保證程序在被編譯到手機(jī)之后仍然可以繼續(xù)訪問(wèn)這個(gè)庫(kù)。 
              
            ***千萬(wàn)別把轉(zhuǎn)碼的proto文件放到[PROJECT]/scripts/protobuf 目錄里面.不信可以試試。
             
            現(xiàn)在, 項(xiàng)目支持protobuf 文件的解析了。
             
            第五步  重新編譯player-x
            如果不習(xí)慣用player-x調(diào)試, 這個(gè)步驟不是必須的。 
             

            進(jìn)入player-x qt源碼目錄 :

            1
            cd quick-cocos2d-x/player/proj.qt
             

            使用qmake 文件執(zhí)行quick-x.pro 文件 

            1
            qmake ./quick-x.pro
             
            繼續(xù):
            make 
             
            等待結(jié)束, 將得到的quick-x-player文件, 
             
            放到:quick-cocos2d-x/player/bin/mac/ 目錄下, 這樣sublime text 裝QuickXDev 擴(kuò)展的直接可以用。 
              
            **如果是mac os 10.9 系統(tǒng), 可能編譯不過(guò)去player-x程序。 我遇到了這個(gè)問(wèn)題。 
             
            會(huì)提示錯(cuò)誤  pb.c:28:10: fatal error: 'endian.h' file not found 
             

            如果錯(cuò)誤信息相同, 修改文件:

            1
            ./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c
             

            查找行:

            1
            #include <endian.h>
              

            臨時(shí)變更為:

            1
            #include <machine/endian.h>
              
            然后重新編譯 player-x 
             
            make 就足夠了 
             
            make
             
            **player-x 編譯完畢后, 千萬(wàn)要將endian.h 引用改回原來(lái)的 #include <endian.h> , 否則打包到手機(jī)的時(shí)候又回提示文件找不到了。 

            posted on 2015-01-17 16:08 多彩人生 閱讀(1955) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): protobufluaandroid cocos2dx

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆分類(lèi)

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久九九精品99国产精品| 午夜不卡久久精品无码免费| 精品久久久久一区二区三区| 国产成人久久777777| 日韩AV毛片精品久久久| 久久婷婷国产综合精品 | 亚洲色大成网站www久久九 | 久久久久无码精品国产| 18岁日韩内射颜射午夜久久成人| 久久91精品国产91久| 久久国产精品久久| 亚洲中文久久精品无码| 国产精品久久久久久久久久免费| 亚洲国产精品无码久久久秋霞2| 99久久99久久久精品齐齐| 欧洲性大片xxxxx久久久| 久久国产色AV免费看| 久久天天躁狠狠躁夜夜avapp| 久久久久久久99精品免费观看| 久久久亚洲AV波多野结衣| 狠狠色综合网站久久久久久久| 99re久久精品国产首页2020| 日韩久久无码免费毛片软件 | 久久久久国产成人精品亚洲午夜| 久久久久人妻一区精品性色av| 欧美成人免费观看久久| 国产精品va久久久久久久| 狠狠干狠狠久久| 国产精品美女久久久久 | 久久亚洲AV无码西西人体| 精品久久久久久成人AV| 久久人人爽人人爽人人AV| 欧美精品九九99久久在观看| 久久久久一级精品亚洲国产成人综合AV区| 丰满少妇人妻久久久久久| 亚洲第一极品精品无码久久| 久久精品卫校国产小美女| 模特私拍国产精品久久| 狠狠色丁香久久婷婷综合| 亚洲香蕉网久久综合影视| 久久久一本精品99久久精品88|