cocos2dx3.2+mac+LUA 安卓移植

前端之家收集整理的这篇文章主要介绍了cocos2dx3.2+mac+LUA 安卓移植前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、搭配环境:
@H_502_5@@H_502_5@1、下载coco2dx3.2
@H_502_5@@H_502_5@@H_502_5@2、下载jdk
@H_502_5@@H_502_5@@H_502_5@@H_502_5@3、下载adt (其中包含sdk和eclipse两个文件,不需要安装)
@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@4、下载ndk
@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@5、下载Apahce ant
@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@然后设置以上变量的的环境路径,@H_502_5@(没有" / ")
@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@注意sdk为:@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@

@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@

#Add ANDROID_SDK_ROOT@H_502_5@
export ANDROID_SDK_ROOT=/Users/Lss/Downloads/adt-bundle/sdk@H_502_5@
链接:http://my.oschina.net/u/1036620/blog/294322@H_502_5@
http://blog.csdn.net/u013174689/article/details/39938551@H_502_5@@H_502_5@@H_502_5@ 二、创建新项目@H_502_5@@H_502_5@
C++:@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@1、cocosnew@H_502_5@hello–pcom.my.MyGame–lcpp–d~/projects@H_502_5@@H_502_5@@H_502_5@

@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@

@H_301_172@2、然后@H_502_5@
@H_301_172@cdprojcets/hello/proj.android@H_502_5@
@H_301_172@pythonbuild_native.py@H_502_5@
3、配置eclipse环境@H_502_5@
LUA:1、cocos new tegame -p com.test.app -l lua–d@H_502_5@@H_301_198@~/projects@H_502_5@@H_502_5@@H_502_5@@H_502_5@
@H_301_198@2、然后,@H_502_5@@H_502_5@@H_502_5@编译so文件@H_502_5@@H_502_5@
先用终端cd进入刚刚新建的项目目录,然后再运行命令@H_502_5@
cocos compile -p android@H_502_5@
3、配置eclipse环境@H_502_5@@H_502_5@
三、eclipse配置,见以下链接@H_502_5@
四,安卓的PB文件问题:@H_502_5@
1、无法读取到被打包进Android asset文件夹中的.pb文件@H_502_5@@H_502_5@
2、无法注册,解决代码如下:@H_502_5@@H_502_5@ 最后是Android平台,按照项目结构和pbc源码的位置设置好mk文件中的src和include后,编译ok,但是运行时却出现了注册.pb文件出错的问题,看了@H_502_5@一下pbc的lua代码,发现注册.pb文件是通过lua函数库中的io.open进行文件读取的,而cocos2d-x中的这部分的lua实现并没有重写过,就是直接封装的fopen,fread,fclose等,这样自然无法读取到被打包进Android asset文件夹中的.pb文件了!最开始考虑使用cocos2d-x的FileUtils替换掉pbc-lua中的io.open加载文件,想法就是既不修改cocos2d-x框架层的io.open实现,也不去重写pbc-lua的文件io操作,尽量都在用户应用层解决。看了一下FileUtils的lua导出,发现能够进行文件读取操作的只有一个getStringFromFile可以用,测试了一下发现还是不能正常完成pbc-lua的注册pb操作,断点调试了一下FileUtils的getStringFromFile以及pbc-lua的相关实现代码,发现问题出在文件读取后的数据传递给lua的过程中,由于cocos2d-x直接实现getStringFromFile的lua-binding中,对加载后的const char*进行了lua_pushlstring(L,s,strlen(s))的操作(由tolua的封装间接调用),而就是因为最后的strlen,导致读取.pb二进制文件时,错误的以文件中的0作为字符串结束标记错误的传递了整个二进制文件的长度,最终导致pbc-lua register时的错误。明确问题后解决就好办了,自己注册一个通过FileUtils实现的专门负责io二进制文件的c函数给lua调用:@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@
staticintbsReadFile(lua_State *L)@H_502_5@
2@H_502_5@ {@H_502_5@
3@H_502_5@ constchar*buff = luaL_checkstring(L,-1);@H_502_5@
4@H_502_5@ Data data = CCFileUtils::getInstance()->getDataFromFile(buff);@H_502_5@
5@H_502_5@ lua_pushlstring(L,(constchar*)data.getBytes(),data.getSize());@H_502_5@
6@H_502_5@ return1;/* number of results */@H_502_5@
7@H_502_5@ }@H_502_5@
8@H_502_5@
@H_502_5@
9@H_502_5@ ...@H_502_5@
10@H_502_5@ 11@H_502_5@ lua_register(tolua_S,"bsReadFile",bsReadFile);@H_502_5@
pb = require"protobuf"@H_502_5@
local pbFilePath = cc.FileUtils:getInstance():fullPathForFilename("res/addressbook.pb")@H_502_5@
cclog("PB file path: "..pbFilePath)@H_502_5@
-- local f =assert(io.open(pbFilePath,"rb"))@H_502_5@
-- local buffer = f:read"*a"@H_502_5@
local buffer = bsReadFile(pbFilePath)@H_502_5@
pb.register(buffer)@H_502_5@
-- f:close()@H_502_5@
方法见:http://blog.k-res.net/archives/1741.html@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@
http://www.58player.com/blog-2537-86362.html@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@
http://www.jb51.cc/article/p-uzwmdzfc-qn.html@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@
注意:文件不要LUA的后缀,以及路径完整性@H_502_5@@H_502_5@@H_502_5@

原文链接:https://www.f2er.com/cocos2dx/343027.html

猜你在找的Cocos2d-x相关文章