当前位置:首页 » 编程软件 » 编译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)

热点内容
这可不是爱ftp 发布:2024-10-18 18:16:15 浏览:808
可区分存储单元中存放的是指令还是数据 发布:2024-10-18 17:57:26 浏览:886
java中return返回值 发布:2024-10-18 17:57:11 浏览:560
安卓换苹果主题对手机有什么影响 发布:2024-10-18 17:49:11 浏览:117
华易数据库 发布:2024-10-18 17:48:05 浏览:358
概率题算法 发布:2024-10-18 17:44:30 浏览:421
可以写源码的文本编译器 发布:2024-10-18 17:44:29 浏览:282
100到200素数c语言 发布:2024-10-18 17:38:20 浏览:181
有钱还众筹源码 发布:2024-10-18 17:33:13 浏览:213
java前一个月 发布:2024-10-18 17:07:19 浏览:950