當前位置:首頁 » 編程軟體 » 編譯luacocos2dx

編譯luacocos2dx

發布時間: 2022-07-14 12:28:11

Ⅰ cocos2dx 3.16怎麼編譯

先給自己科普一下, android sdk 是給java開發者用的, 咱C++開發者用的是android ndk, 所以就是使用ndk來編譯cocos2dx程序了

使用命令行創建一個項目, 我這里創建的是一個lua項目:cocos new lua_proj2 -p com.company_name.program_name -l lua -d d:\xxx\xxx
此時創建了一個DEMO程序, 此時就可以使用cocos命令生成一個apk包, 進入到目錄lua_proj2\frameworks\runtime-src下面, 在此目錄下面執行命令cocos compile -p android 就會生成一個apk包, 把這個拖到genymotion上面, 就安裝跑起來了.
上面說的是不使用eclipse的方式來生成一個apk包, 下面記錄一下在eclipse中載入lua_proj2這個項目, 並生成apk包的過程. 為什麼一定要將cocos2dx項目導入到eclipse中來生成apk包呢, 因為在eclipse中可以連接AVD來調試android程序, 再者, eclipse可以運行在linux環境下面, 後面我打算在linux進行開發, 所以這一步是一定要跨出去的

打開eclipse, 載入lua_proj2項目, 在此注意一下, 不需要載入libcocos2dx這個項目, 只要載入lua_proj2這個自己新建一項目即可
在eclipse中右擊lua_proj2 -> Properties. 出現Properties for lua_proj2框框

創建一個新的builder

第一個紅框是builder名稱, 隨便填寫, 第二個紅框框是NDK生成工具, 即, 使用此工具來編譯C++項目, 第三個紅框框是工作目錄, 此處我使用lua_proj2項目目錄作為工作目錄, 切換到Environment選項卡, 新建一個在此生成器中使用的環境變數NDK_MODULE_PATH, 值是......\lua_proj2\frameworks\cocos2d-x\cocos;......\lua_proj2\frameworks\cocos2d-x;......\lua_proj2\frameworks\cocos2d-x\external, 前面的.......是絕對目錄的省略, 這里要輸入絕對路徑名稱, 在此我就不寫絕對路徑了.

一路OK下去, 到下面這個畫面

這個就新建立的builder, Project->Build Project

出現大量的error: 'override' does not name a type錯誤, 這是由於NDK的版本太低了, override是C++11中才有的關鍵字, 而到NDKr10才支持C++11, 所以要升級NDK. 到官網去下載吧
不大, 400多M的樣子, 更新完成之後, 看一下ndk\toolchains目錄下面的編譯器, 我的目錄是下面這樣子的

我很想使用clang來編譯, 但是現階段我還不會配置, 就用GCC吧, x86-4.6 & x86-4.8兩個版本的GCC, 4.8的支持C++11
在Application.mk中添加一句NDK_TOOLCHAIN_VERSION = 4.8 就是指定使用GCC4.8來編譯cocos2dx項目, 跑起來了, 下面是eclipse跑起來的console輸出

跟命令行下執行cocos compile -p android 跑出來的是一樣的, 都是在編譯程序. 下面進入到在eclipse下面調試程序

Ⅱ Mac開發cocos2dx-lua用什麼工具

就是xcode,加斷點看運行哪裡的代碼了,修改過來

Ⅲ cocos2dx-3.6的luajit怎麼了

cocos2d-x中luajit的使用

新版本的cocos2d-x使用了luajit來替代原始的lua,好處一是可以極大的提高運行速度(android下可以開jit,運行速度提高10~60倍,ios下不可以開jit,運行速度也可以提高2~3倍)。 二是luajit編譯的位元組碼現階段來說無法反編譯,也就是說無法破解。 這里對luajit進行詳細的說明。

1、基本使用。這個很簡單,不用修改任何代碼,與lua5.1完全兼容。 對應的頭文件和庫要替換成luajit的(與lua命名相同)

2、發布時編譯成位元組碼。

這個需要luajit.exe的執行文件。 編譯方法(windows): 在(http://luajit.org/download.html)下載源代碼,使用vs的命令行工具,執行msvc.bat進行編譯。 我最開始使用cygwin直接執行make結果出了很多編譯錯誤和詭異的問題。 其實直接使用批處理才是正確的方式。

編譯完成後,要注意luajit.exe和源代碼src/jit文件夾要同時並且匹配使用。否則運行時會出現 "unknown luaJIT command or jit.* moles not installed"的錯誤。

編譯成位元組碼的命令如下: luajit -b 原始文件 輸出文件

更多詳細說明可以直接執行 luajit -b來獲取。 這里還要注意,輸出文件最好保持.lua的擴展名,否則require文件的時候會提示找不到文件。除非require裡面使用的完整名字。

我在編譯位元組碼時還碰到了一個問題,就是無論編譯什麼文件都提示這個 "luajit '=' expected near '<eof>'" ,後來換了luajit的版本後就沒有出現了。可能跟我一開始手欠改了luajit源代碼有關。

3、編譯luajit的靜態庫文件(for android)

編譯位元組碼所用的執行文件和我們開發程序時使用的靜態庫文件要保持版本一致。 windows版本所需要的文件在編譯執行文件時就已經生成。

Ⅳ vs2013里cocos2dx+lua如何修改代碼後直接刷新看效果,而不用關掉exe重新編譯;

x,結果發現一個很糾結的問題,如果我一旦修改了一個Lua文件,我必須clean之後再build,否則修改的Lua文件不會體現出來。這是一個很令糾結的結果,特別是我要進行調試的時候,在網上搜索了一圈,發現xcode原來可以提供一個build phase的功能,允許在build中間執行一些腳本,而這個時候只要將腳本文件touch一下就可以解決問題,但是比較奇

Ⅳ cocos2dx 用luajit 加密腳本 會被反編譯嗎

1、新建一個名為1.lua的文件,裡面只有一句話print("hello
lua"),新建一個空的out.lua腳本文件
2、開始--運行--cmd
3、luac
-o
out.lua
1.lua
註:
luac
-o
[編譯後腳本名]
[腳本名],必要時帶上腳本路徑,如:
回車之後,再打開out.lua就可以看到編譯好的位元組碼了
然後實驗一下,執行這個位元組碼腳本,可以看到lua原生的解釋器可以直接解析luac編譯出來的bytecode腳本,很方便!

Ⅵ cocos2dx-lua 能不能用AMF3來加密lua源文件

你用的是cocos2dx 3.2版本嗎?如果是的話,加密就會比較簡單了。

官方文檔詳見:http://cocos2d-x.org/wiki/Cocos_luacompile

.lua文件編譯為.luac文件[.lua to .luac]
在項目文件目錄下嘗試
cocos luacompile -h查看幫助信息
cocos luacompile -s ./projects/MyLuaGame/src -d ./projects/MyLuaGame/src -e -k MyLuaKey -b MyLuaSign

./projects/MyLuaGame/src--》lua源文件目錄

./projects/MyLuaGame/src--》生成luac存放目錄

關於MyLuaKey及MyLuaSign的設置,見AppDelegate.cpp

stack->setXXTEAKeyAndSign("2dxLua", strlen("2dxLua"), "XXTEA", strlen("XXTEA"));

修改對應的key及sign即可。

Ⅶ cocos2dx是怎麼使用lua引擎的

第一步:看cocos2dx調用lua的最初切入點:

[cpp] view plain
bool AppDelegate::applicationDidFinishLaunching()
{
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(480, 320, kResolutionNoBorder);
pDirector->setDisplayStats(true);
pDirector->setAnimationInterval(1.0 / 60);

// register lua engine
CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();//從這里開始了lua旅程。
CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);//保存剛才新建的lua引擎對象,以便別處調用。

std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("hello.lua");//CCFileUtils工具類一定封裝了文件的搜索路徑。
//接下來直接執行了腳本,跟句helloCpp工程的實現,這里本該是類似
//CCScene *pScene = HelloWorld::scene();
//pDirector->runWithScene(pScene);
//這樣的代碼,但這里並沒有這樣的代碼,可以猜測:hello.lua中一定是實現了類似這樣的一些功能,事實上,一定是這樣。
//---因為需要添加的這些東西scene、other nodes都是一些c++類的對象,
//既然hello.lua能完成這些工作,那麼lua也一定是有能力訪問並操作了這些類與對象,
//換句話說,也就是一定存在一種機制,讓c++暴漏一些介面供lua調用,
//亦即:lua可以訪問cocos2dx裡面的東西,並且,一定封裝的很好用,否則沒人用了。
pEngine->executeScriptFile(path.c_str());
return true;
}

第二步:看看CCLuaEngine到底幹了點啥

[cpp] view plain
class CCLuaEngine : public CCScriptEngineProtocol
{
public:
static CCLuaEngine* defaultEngine(void);
virtual ~CCLuaEngine(void);
virtual ccScriptType getScriptType() {
return kScriptTypeLua;
};
CCLuaStack *getLuaStack(void) {
return m_stack;
}
//-----------new in me 1
virtual void addSearchPath(const char* path);
//-----------new in me 2
virtual void addLuaLoader(lua_CFunction func);
//----------------------------inherit from CCScriptEngineProtocol------------------
//==================這些函數好像都是純虛函數在父類中===========================
//--------下面這幾個函數基本都是調用【CCLuaStack *m_stack;】的成員方法來實現的
virtual void removeScriptObjectByCCObject(CCObject* pObj);
virtual void removeScriptHandler(int nHandler);
virtual int reallocateScriptHandler(int nHandler);
virtual int executeString(const char* codes);
virtual int executeScriptFile(const char* filename);
virtual int executeGlobalFunction(const char* functionName);
//--------------------------------end--------------------------------
virtual int executeNodeEvent(CCNode* pNode, int nAction);
virtual int executeMenuItemEvent(CCMenuItem* pMenuItem);
virtual int executeNotificationEvent(CCNotificationCenter* pNotificationCenter, const char* pszName);
virtual int executeCallFuncActionEvent(CCCallFunc* pAction, CCObject* pTarget = NULL);
virtual int executeSchele(int nHandler, float dt, CCNode* pNode = NULL);
virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches);
virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch);
virtual int executeLayerKeypadEvent(CCLayer* pLayer, int eventType);
virtual int executeAccelerometerEvent(CCLayer* pLayer, CCAcceleration* pAccelerationValue);
virtual int executeEvent(int nHandler, const char* pEventName, CCObject* pEventSource = NULL, const char* pEventSourceClassName = NULL);
int executeTableViewEvent(int nEventType,cocos2d::extension::CCTableView* pTableView,void* pValue = NULL, CCArray* pResultArray = NULL);
virtual int executeEventWithArgs(int nHandler, CCArray* pArgs);
virtual bool handleAssert(const char *msg);
virtual bool parseConfig(CCScriptEngineProtocol::ConfigType type, const std::string& str);
//----------------------------inherit from CCScriptEngineProtocol end--------------
private:
CCLuaEngine(void)
: m_stack(NULL)
{}
bool init(void);

static CCLuaEngine* m_defaultEngine;
CCLuaStack *m_stack;
};

第三步:CCLuaEngine類中有一個指針成員變數m_stack,我們先來看看它的定義,注意下CCLuaStack和CCLuaEngine的區別於聯系

[cpp] view plain
class CCLuaStack : public CCObject
{
public:
static CCLuaStack *create(void);
static CCLuaStack *attach(lua_State *L);
lua_State* getLuaState(void) {
return m_state;
}
virtual void addSearchPath(const char* path);
virtual void addLuaLoader(lua_CFunction func);
virtual void removeScriptObjectByCCObject(CCObject* pObj);
virtual void removeScriptHandler(int nHandler);
virtual int reallocateScriptHandler(int nHandler);
virtual int executeString(const char* codes);
virtual int executeScriptFile(const char* filename);
virtual int executeGlobalFunction(const char* functionName);

virtual void clean(void);
virtual void pushInt(int intValue);
virtual void pushFloat(float floatValue);
virtual void pushBoolean(bool boolValue);
virtual void pushString(const char* stringValue);
virtual void pushString(const char* stringValue, int length);
virtual void pushNil(void);
virtual void pushCCObject(CCObject* objectValue, const char* typeName);
virtual void pushCCLuaValue(const CCLuaValue& value);
virtual void pushCCLuaValueDict(const CCLuaValueDict& dict);
virtual void pushCCLuaValueArray(const CCLuaValueArray& array);
virtual bool pushFunctionByHandler(int nHandler);
virtual int executeFunction(int numArgs);
virtual int executeFunctionByHandler(int nHandler, int numArgs);
virtual int executeFunctionReturnArray(int nHandler,int nNumArgs,int nNummResults,CCArray* pResultArray);
virtual bool handleAssert(const char *msg);
protected:
CCLuaStack(void)
: m_state(NULL)
, m_callFromLua(0)
{}
bool init(void);
bool initWithLuaState(lua_State *L);

lua_State *m_state;
int m_callFromLua;
};

Ⅷ lua開發cocos2dx怎麼進行聯調

如何在cocos2d c 代碼中調用lua以及探究,有需要的朋友可以參考下。

如何在cocos2d c 代碼中調用lua

在AppDelegate 中加入了
#include"Lua_extensions_CCB.h"
#include"CCLuaEngine.h"
#include"Lua_web_socket.h"

查到代碼載入lua腳步引擎
官方原話注冊引擎
CCLuaEngine*pEngine=CCLuaEngine::defaultEngine();
CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

和ccb有關的lua
CCLuaStack*pStack=pEngine->getLuaStack();
lua_State*tolua_s=pStack->getLuaState();
tolua_extensions_ccb_open(tolua_s);

和web_socket 相關的lua
pStack=pEngine->getLuaStack();
tolua_s=pStack->getLuaState();
tolua_web_socket_open(tolua_s);

pEngine->executeScriptFile("luaScript/controller.lua");
結束

打開luaScript/controller.lua仔細研究

-- avoidmemory leak
collectgarbage("setpause",100)
collectgarbage("setstepmul",5000)

require"luaScript/mainMenu"
----------------

-- run
local scene =CCScene:create()
scene:addChild(CreateTestMenu())
CCDirector:sharedDirector():runWithScene(scene)

到這里如果熟悉cocos2dx 的朋友就很熟悉了
不錯,這里是cocos2d中lua的使用方法和c 中調用差別不大!

但是還沒有完

Cocos2dx 對lua的封裝是很好的!

如果不熟悉c 與lua的綁定的代碼下面的不建議看
C 與lua的綁定傳送門

關於cocos2d 與 lua綁定的代碼的探究

//打開"CCLuaEngine.h"

單例實現CCScripEngineProtocol
後期應該支持不僅僅只是lua的腳本引擎

頭文件有很多方法

挑一個看看
virtualintexecuteNodeEvent(CCNode*pNode,intnAction);

intCCLuaEngine::executeNodeEvent(CCNode*pNode,intnAction)
{
intnHandler=pNode->getScriptHandler();
if(!nHandler)return0;

switch(nAction)

熱點內容
取捨演算法 發布:2024-10-18 16:12:36 瀏覽:249
安卓數據線一般在什麼價位 發布:2024-10-18 16:09:25 瀏覽:732
老式安卓機怎麼插卡 發布:2024-10-18 15:52:35 瀏覽:338
pc搭建nas伺服器 發布:2024-10-18 15:51:59 瀏覽:266
androidimei 發布:2024-10-18 15:51:56 瀏覽:292
c語言零基礎入門 發布:2024-10-18 15:46:42 瀏覽:188
比特幣如何存儲 發布:2024-10-18 15:31:36 瀏覽:615
雲服務相比傳統伺服器有哪些優勢 發布:2024-10-18 15:26:20 瀏覽:679
sql10進制轉16進制 發布:2024-10-18 15:25:33 瀏覽:865
錯誤日誌上傳 發布:2024-10-18 15:08:45 瀏覽:270