添加文件【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed、Cocos2dxActivity cannot be 路径等问题

本文是一篇关于添加文件的帖子

    

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    CCString* pstrFileContent = CCString::createWithContentsOfFile("himi.lua");
if (pstrFileContent)
 {
 pEngine->executeString(pstrFileContent->getCString());
 }
#else
 std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("himi.lua");
 pEngine->addSearchPath(path.substr(0, path.find_last_of("/")).c_str());
 pEngine->executeScriptFile(path.c_str());
#endif <em id="__mceDel">
</em>

    本站文章均为

     李华明Himi 

    原创,转载务必在显明处注明:(作者新浪微博:

     @李华明Himi 

    

    
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/lua-game/1368.html

     

    
☞ 点击订阅 ☜

     本客博最新态动!实时将最新博文知通您!

    

    

    

    

 

    

 

    

    对于跨平台整合,Himi已写了1.x 与 2.x 的了,还不道知如何整合的请移步到

    【Cocos2d-X(2.x) 游戏发开系列之二】cocos2dx最新2.x版本跨平台整合NDK+Xcode,Xcode编写&编译代码,Android入导包打运行可即!

    本篇只是处理在整合cocos2dx-lua目项会涌现的几个问题的方法。

    首先须要说明的是Himi应用的Cocos2dx Version : Cocos2dx 2.1.2 hotfix

       第一:关于 get data from file(xxx.lua) failed/can not get file data of xxx.lua  这个问题,如下图:

    QQ20130423-9

     

    此问题的原因是由于你自定义目录的原因形成的,将到目录,那么不得不说明下,在xcode中有两种颜色的文件夹,第一种 黄色 和 绿色 

    黄色文件夹:不带路径,直接添加到根目录的文件夹,也就是说没有文件夹的意思,只是将文件添加目项中了。

         绿色文件夹:真正的将文件夹添加进来,其文件夹中的个每文件带有路径。如a/a.lua,是将文件夹整个添加到目项的根目录

    可能还有童鞋不是很白明下面的两种颜色的文件夹的意思,面下举个例子:

    例如我们将一个ios目项停止包打,此ios目项的Resources添加一个叫dir的文件夹,其中dir中括包两个lua文件a.lua b.lua 那么此时将dir文件夹添加进目项我们xcode目项中,定肯须要右键Resources文件夹“Add Files to xxx(目项名)”,然后在新窗口中择选我们须要添加的文件夹,如下图:

    QQ20130423-8

    须要注意的是在下方有一个项选:

    Folders :

    1. Create groups for any added folders: 认默项选,将文件夹创立成一个groups式形添加

    2. Create folder references for any added folders : 引用创立文件夹停止添加

     应用第一种式形停止添加的文件夹是黄色,第二种式形添加的文件夹是绿色

    那么如果我们采用第一种式形将dir文件夹加入目项停止包打,那么解压xx.ipa后可以发明这个dir文件夹不存在的,并且dir文件夹中的文件全部都认默放在目项根目录中。

    反之 ,如果我们采用第二种式形添加,那么包打后的目项.ipa解压后会看到dir文件。

    不道知这么说大家有无懂得,还不懂得的童鞋请自行包打测试察观!

    须要注意的是!应用ndk 编译cocos2dx-lua目项时,认默把目项下的Resources  全部文件夹和文件都copy到android目项的assets目录下!

    面下开始解讲为什么涌现 get data from file(xxx.lua) failed/can not get file data of xxx.lua  

    其实这个问题是android加载运行lua文件时找不到这个文件,说白了就是路径不对!

    举例,如果你有一个添加了一个lua文件夹,其中含包一个黄色的himi.lua本脚文件夹,当你执行时,代码一般如下:

    

    

 

    童鞋们想想,如上代码中如果是ios平台取获himi.lua整完路径是否是就是根目录下,因为这个本脚上一层lua文件夹是个黄色文件夹!那么在ios上执行运行定肯没有任何问题。

        但是!如果你将此段代码直接编译android运行定肯涌现找不到himi.lua文件的问题,原因是你应当加上路径,修改如上一段代码如下:

    

1
2
3
4
5
6
7
8
9
10
11
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    CCString* pstrFileContent = CCString::createWithContentsOfFile("lua/himi.lua");
 if (pstrFileContent)
 {
 pEngine->executeString(pstrFileContent->getCString());
 }
#else
 std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("himi.lua");
 pEngine->addSearchPath(path.substr(0, path.find_last_of("/")).c_str());
 pEngine->executeScriptFile(path.c_str());
#endif

       如上添加路径后可即运行功成!但是!新问题又涌现了,一旦你在编译代码到Android后,如果有自定义的文件夹,那么其中的个每文件都须要路径,这是个问题,另外如果你的一个本脚中有require 其他本脚,也会有问题!对不对?!

             因此我们可以采用如来下美完处理:

               一、 我们添加自定义本脚文件夹,可以绿色文件夹方法添加。

              二、当require 其他本脚时,誊写整完的路径,如:require “x.lua”

    这样我们以可就让ios运行本脚也须要路径,这样一统了android与ios加载资源的路径问题!

    运行第一个lua,示例代码可以如下:

    每日一道理
生命,是一场漫长的棋局。这盘棋没有猎猎西风,没有四起狼烟,只有在取舍和进退中抉择。只有像棋中的小卒那样,勇往直前,毫不退缩沿着沟沟坎坎的人生之路,艰难而执着的求索,前进,才会谱写人生最壮丽的强者之歌。

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    std::string dirPath = "lua";
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    CCString* pstrFileContent = CCString::createWithContentsOfFile((dirPath + "/x.lua").c_str());
    if (pstrFileContent)
    {
        pEngine->executeString(pstrFileContent->getCString());
    }
#else
    std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename((dirPath + "/x.lua").c_str());
    pEngine->addSearchPath(path.substr(0, path.find_last_of("/") - dirPath.length()).c_str());
    pEngine->executeScriptFile(path.c_str());
#endif
//    CCDirector::sharedDirector()->runWithScene(World::scene());
 
    return true;
}

     

     

     第二:在终端里应用ndk编译时涌现fata error HelloWorldScene.h No such file问题 如下图:

    QQ20130422-1

    此问题是因为lua板模是没有此类的,所以我们修改如下文件:

    找到你整合的android目项目录下的jni/hellocpp/main.cpp文件,将

    #include “HelloWorldScene.h”  修改成: #include “cocos2d.h”

     

    ok,再编译可即。

     

    第三:类第一个问题,编译时涌现 CCLuaEngine.h: No such file 问题,如下图:

    QQ20130423-3

     

    此问题须要修改你整合android目项下的jni/Android.mk 文件,如下:

    首先除删      http://www.cnblogs.com/Classes/HelloWorldScene.cpp

    然后在  LOCAL_WHOLE_STATIC_LIBRARIES 后添加 cocos_lua_static 库

    最后添加 $(call import-module,scripting/lua/proj.android/jni)

    大家可以参考引擎示例中的lua示例下的  jni/Android.mk  置配可即。其中还添加物理引擎box2d等库等

     

        第四:Eclipse入导Android目项报错 Cocos2dxActivity cannot be resolved to a type 或 The Improt org.cocos2dx.lib cannot be resolved 问题,如下图:

     

    QQ20130423-4

    种这问题是Build Path缺乏文件的link,我们置配下可即,首先右键目项然后择选Properties,然后择选“Java Build Path”,在 Source 栏目中点击“Link Source” ,如下图:

     

    QQ20130423-5

     

     

    然后会涌现一个新窗口:

    Linked folder location:

    择选link的文件,其路径向指cocos2dx引擎目录的cocos2d-2.1rc0-x-2.1.2-hotfix/cocos2dx/platform/android/java/src 目录可即!

     Folder name :

    这里认默是src,如果报错,我们自定义个名字可即。

    置设完成后路一finish或OK保存回返。

     

     

    QQ20130423-6

    


文章结束给大家分享下程序员的一些笑话语录: 问路
有一个驾驶热气球的人发现他迷路了。他降低了飞行的高度,并认出了地面 上的一个人。他继续下降高度并对着那个人大叫,“打扰一下,你能告诉我我 在哪吗?”
下面那个人说:“是的。你在热气球里啊,盘旋在 30 英尺的空中”。
热气球上的人说:“你一定是在 IT 部门做技术工作”。
“没错”,地面上的人说到,“你是怎么知道的?”
“呵呵”,热气球上的人说,“你告诉我的每件事在技术上都是对的,但对都没 有用”。
地面上的人说,“你一定是管理层的人”。
“没错”,热气球上的人说,“可是你是怎么知道的?”
“呵呵”,地面上的那人说到,“你不知道你在哪里,你也不知道你要去哪,你 总希望我能帮你。你现在和我们刚见面时还在原来那个地方,但现在却是我 错了”。

posted @ 2013-04-23 20:05  xinyuyuanm  阅读(2046)  评论(0编辑  收藏  举报