zoukankan      html  css  js  c++  java
  • 添加文件【COCOS2DXLUA 脚本开发之十三】解决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 部门做技术工作”。
    “没错”,地面上的人说到,“你是怎么知道的?”
    “呵呵”,热气球上的人说,“你告诉我的每件事在技术上都是对的,但对都没 有用”。
    地面上的人说,“你一定是管理层的人”。
    “没错”,热气球上的人说,“可是你是怎么知道的?”
    “呵呵”,地面上的那人说到,“你不知道你在哪里,你也不知道你要去哪,你 总希望我能帮你。你现在和我们刚见面时还在原来那个地方,但现在却是我 错了”。

  • 相关阅读:
    (转载)delphi checklistbox用法
    (转载)c++builder/delphi中透明panel及透明窗口的实现方法_delphi教程
    (转载)图片的漫游
    (转载)SQL中导入图片
    (转载)使用ADOConnet.BeginTrans后,出现错误提示:无法在此会话中启动更多的事务?
    (转载)delphi 中如何调用sql 存储过程
    C# 读取注册表获取本机的全部的typelib信息
    EXCEL 引用autocad vba,自动加载其类型库
    AutoCAD2013 以上利用AccoreConsole+ c# NetApi Windows Froms 封装
    Aveva Marine 新建项目001
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3038675.html
Copyright © 2011-2022 走看看