cocos2dlua读取文件|cocos2d-x-310怎么lua调试

|

① cocos2d-x判断文件是否存在for android

最近在做一款cocos2d-x的游戏,想用access去判断文件是否存在,在windows和ios平台完全ok,但是android怎么都不可以。后来发现,原来anroid的资源文件都还在apk中未解压出来,cocos2d-x针对android时这样读取文件的: 1 unsigned char* CCFileUtcocos2d-x判断文件是否存在for android

② cocos2dx lua 代码中读取二进制文件用什么方法

如何在cocos2d c++代码中调用lua以及探究,有需要的朋友可以参考下。 如何在cocos2d c++代码中调用lua 在AppDelegate 中加入了 #include"Lua_extensions_CCB.h" #include"CCLuaEngine.h" #include"Lua_web_socket.h" 查到代码加载lua脚步引擎

③ cocos2d-x-3.10怎么lua调试

有两个工具可以选择,一个简单点,一个复杂点.1. Decoda(商用,需要收费,而且很贵,不过有好心人分享了破解版)2. LuaEdit(开源)我的意思不是在评价这两个debug工具,而是采用两种工具使用的方式难易.还是先说说简单容易操作的方式吧.这个不需要改动代码.(Decoda)我是在window上面编译的HelloLua sample,工具就是VS2010. debug模式编译.这个就不用多说了吧.生成的文件在Debug.win32目录下面,而且包含了很多的链接库文件.启动Decoda,在Debug选项中选择Start Debugging[F5],需要做的就是在Commad选项中选择执行debug的文件的绝对路径.下面就开始debug,但是会提示一个错误:很清晰,在cocos2d-x的后台输出了,提示我们找不到hello.lua文件.当然也是找不到hello2.lua文件的.这个是因为路径的问题,我没有配置vs,导致编译后生成的文件不是在当前项目的文件夹下,所以找不到lua文件,那就到HelloLua sample文件夹下面将Resource文件夹下面的文件都拷贝到当前目录就可以了.然后再执行debug就可以看到游戏画面了.注意查看当前后台输出信息,是正常的,这个需要确认注意现在还没有插入断点,所以关闭现在的debug,然后再lua文件中插入断点再重复执行刚才的操作就可以实现debug了.我只是假设性的随便添加了一个watch target,结果可以看上图.在Decoda的文件包中有使用文档,E文的,简明的教程.Decoda有两种使用方式,而我只是简单介绍了注入宿主程序的方式,没有介绍attack宿主进程的方式,可以去参考文档.2 复杂的方式是使用LuaEdit进行调试.LuaEdit提供了Remote debug模式,不过你在调试的时候需要在宿主机上面开启remote debugger.LuaEdit提供了编程需要的文件和库,需要按照官网文档的方式做.

④ 如何在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有关的luaCCLuaStack*pStack=pEngine->getLuaStack();lua_State*tolua_s=pStack->getLuaState();tolua_extensions_ccb_open(tolua_s);和web_socket 相关的luapStack=pEngine->getLuaStack();tolua_s=pStack->getLuaState();tolua_web_socket_open(tolua_s);pEngine->executeScriptFile("luaScript/controller.lua");结束打开luaScript/controller.lua仔细研究– avoidmemory leakcollectgarbage("setpause",100)collectgarbage("setstepmul",5000)require"luaScript/mainMenu"—————— runlocal 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){casekCCNodeOnEnter:m_stack->pushString("enter");break;casekCCNodeOnExit:m_stack->pushString("exit");break;:m_stack->pushString("enterTransitionFinish");break;:m_stack->pushString("exitTransitionStart");break;casekCCNodeOnCleanup:m_stack->pushString("cleanup");break;default:return0;}intret=m_stack->executeFunctionByHandler(nHandler,1);m_stack->clean();returnret;}这里是进入CCNode后的一些消息函数的处理不管intret=m_stack->executeFunctionByHandler(nHandler,1);最终是回到了CCLuaStack调用了executeFunctionByHandler(nHandler,1);继续探究intCCLuaStack::executeFunctionByHandler(intnHandler,intnumArgs){intret=0;if(pushFunctionByHandler(nHandler)) /* L: … arg1 arg2 … func */{if(numArgs>0){lua_insert(m_state,-(numArgs+1)); /* L: … func arg1 arg2 … */}ret=executeFunction(numArgs);}lua_settop(m_state,0);returnret;}可以看到一些和lua与c++联系的代码了看看这个类的初始化boolCCLuaStack::init(void){m_state=lua_open();luaL_openlibs(m_state);tolua_Cocos2d_open(m_state);toluafix_open(m_state);// Register our version of the global "print"functionconstluaL_regglobal_functions[]={{"print",lua_print},{NULL,NULL}};luaL_register(m_state,"_G",global_functions);tolua_CocoStudio_open(m_state);#if(CC_TARGET_PLATFORM==CC_PLATFORM_IOS||CC_TARGET_PLATFORM==CC_PLATFORM_MAC)CCLuaObjcBridge::luaopen_luaoc(m_state);#endifregister_all_cocos2dx_manual(m_state);register_all_cocos2dx_extension_manual(m_state);register_all_cocos2dx_studio_manual(m_state);// add cocos2dx loaderaddLuaLoader(cocos2dx_lua_loader);returntrue;}这个里的方法看名称应该是注册 coco2dx 中的类到C++中register_all_cocos2dx_manual(m_state);register_all_cocos2dx_extension_manual(m_state);register_all_cocos2dx_studio_manual(m_state);详细看Coco2dx-studio 先不看头文件lua_cocos2dx_manual.h#ifdef__cplusplusextern"C"{#endif#include"tolua++.h"#ifdef__cplusplus}#endifLUA_APIintregister_all_cocos2dx_manual(lua_State*tolua_S);头文件lua_cocos2dx_extensions_manual#ifdef__cplusplusextern"C"{#endif#include"tolua++.h"#ifdef__cplusplus}#endifLUA_APIintregister_all_cocos2dx_extension_manual(lua_State*tolua_S);惊人的相似看看tolua++.h真相快水落石出了这里定义了lua所以用到全部函数这里是头部,/* tolua** Support code for Lua bindings.** Written by Waldemar Celes** TeCGraf/PUC-Rio** Apr 2003** $Id: $*//* This code is free software; you can redistributeit and/or modify it.** The software provided hereunder is on an"as is" basis, and** the author has no obligation to providemaintenance, support, updates,** enhancements, or modifications.*/原来tolua也是lua封装起来的函数库,大师2003 4月就写好了相当的牛好上面只看了lua_cocos2dx_extensions_manual.h的头文件cpp文件我们也一看详情我发现注册了一些函数但是不是全部在CCLuaStack::init()方法里还有tolua_Cocos2d_open(m_state);这个方法相应的头文件是LuaCocos2d..h可以打开看看详情Luacocos2d..cpp注册了n多函数我用注册是相对于lua而言Luacocos2d.cpp代码贼多有兴趣的童鞋可以看看看来什么时间要看看cocos2d studio 的代码紧跟时代的步伐不能老是cocos builder

⑤ 求教quickcocos2dxlua如何读取xml配置表

自己集成XML读写库,导出到lua使用cocos引擎自带的,CCUserDefault:sharedUserDefault()注意格式如果您对我的回答有不满意的地方,还请您继续追问;答题不易,互相理解,互相帮助!

⑥ cocos2d-x 3.2 lua 怎样加载plist文件

local cache = cc.AnimationCache:getInstance() cache:addAnimations("animations-2.plist") local animation = cache:getAnimation("dance_1") animation:setDelayPerUnit(0.25) animation:setRestoreOriginalFrame(true) local aniamte = cc.Animate:create(animation) sprite:runAction(cc.RepeatForever:create(aniamte))注释:animations-2.plist 为list文件,dance_1为动画名字原理:利用cocos2d-x里面的dickmake工具解析获取plist文件的信息,文件分为连个部分,一部分是animation ,这个部分记录的是每个动画所对应的序列帧的图片另外一部分是properties, 这个部分记录了需要加载的纹理图片(spritesheet)和格式信息(format)format格式:分为1和2,待会解析序列帧的方式不一样顺序:(1)如果有spritesheet,那么先加载里面的纹理图片(3)根据格式,调用不同的方法解析spritesheet(2)解析spritesheet,将帧图片加载到动画缓存里面

⑦ 如何使用Cocos Studio导出的LUA文件

首先导出的LUA文件是这样的

这段代码,首先判断callBackProvider是否为空,然后呢,将他的返回值设置为Button_1的Click回调函数。

这样就很明白了。create时候需要传入的参数callBackProvider是一个函数,他的功能是根据传入的3个参数进行判断,最终返回一个函数最为Button(或者其他node)的回调函数!

callBackProvider的三个参数,分别是,当前LUA文件的路径,所绑定的Node(可以通过name或者tag来判断是哪个node),最后是回调函数的名字,通过这三个参数可以很容易的知道是哪个按钮的回调事件,从而返回该按钮所需要的回调函数。

所以,在create时候应该是这样的:

localcallBackProvider=function(path,node,funcName)

ifpath=="Scene.lua"andnode:getName()=="Button_1"andfuncName=="bnt2"then

localfunctionbtnCallback(node,eventType)

–TODO

end

returnbtnCallback

end

end

localcsLuaScene=require("Scene.lua").create(callBackProvider)

也许大家看第一篇文章时候,注意到 我这里提示了一个错误,版本不兼容。是时候更新到3.5了!如果不想更新的话,就把3.5的UI的部分替换过来吧………

⑧ cocos2d-x如何与Lua想结合使用 具体点

你好,关于这个问题,你只需要看一下C++如果调用lua就可以了,我给你一些参考,这是我曾经做过的调用测试,如果有问题,共同交流.C++调用lua函数:C++编译环境:Code::block与lua-5.2.1源码包。下载源码包后,解压,新建控制台工程,添加所有src目录下的代码,将lua.c文件从工程中移除,然后进行编译,得到库文件(在bin目录下.dll and .a)。然后将头文件与库文件分开放在二个目录下面。并添加到Code::block编译器中。linksetting添加.a文件。包含头文件:#include "lua.hpp"如果是C工程,请这样写extern "C" {#include "lua.h"#include "lualib.h"#include "lauxlib.h"}连接库文件:.dll文件和.a文件/**1.定义Lua的初始化变量*2.luaL_newstate()初始化lua*3.luaL_dofile()加载所有的lua库*4.Lua_getglobal()得到lua文件中的函数名*5.lua_pushnumber()将参数压入堆栈*6.lua_call()调用(执行)lua函数*7.lua_tonumber()得到lua函数的返回值*8.lua_pop()将结果弹出堆栈,清空堆栈*9.lua_close()关闭lua*/.cpp文件内容如下:int main ( int argc, char *argv[] ){ int sum; lua_State* L; L = luaL_newstate(); luaL_openlibs(L); luaL_dofile(L, "abc.lua"); lua_getglobal(L, "add"); lua_pushnumber(L, 10); lua_pushnumber(L, 10); lua_call(L, 2, 1); sum = (int)lua_tonumber(L, -1); lua_pop(L, 1); printf( "The sum is %d\n", sum ); lua_close(L); return 0;}.lua文件内容如下:function add(a, b)c = a+b return cend;

⑨ cocos2dx + lua 一直到android设备上读取表失败

问题应该是lua代码的问题吧,因为你1能读取,table不能读取。建议检查下table的格式是否正确。


赞 (0)