zoukankan      html  css  js  c++  java
  • 【Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之三】动手绑定自己定义类至Lua

        查看【Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之二】新建项目中配制环境,我们完美的在新建项目中完毕了绑定须要的环境,接下来才是最关健的一步。绑定自己定义C++类至Lua。

        其实引擎为了方便我们应对不同平台,已经帮我们创建了不同平台的project项目。

    为了编辑代码方便。我使用VS2013打开了"runtime-src"文件夹下的"proj.win32"project。 前往项文件夹径“F:Cocos2dx-LuaGarfieldframeworks untime-srcClasses”。我将在这里创建一个自己定义类"Pet",代码例如以下。








    仅仅是一个非常easy的Pet类。

    1.继承于引擎定义的精灵类Sprite;
    2.通过引擎定义的宏CREATE_FUNC(Pet)定义一个静态方法create();
    3.两个成员函数init()、setPet();
    4.具有一个数据成员name。

        很的简单。我们正是要一切从简单開始。只是须要再次提醒的是我们是在“F:Cocos2dx-LuaGarfieldframeworks untime-srcClasses”创建了Pet类,一会我们将用到这个路径。

        准备好定义C++类之后,我们再回想一下上一小节的内容,我们在环境測试中。通过运行“genbindings.py"脚本将Cocos2d-x引擎中全部的C++类文件绑定至Lua。(尽管測试环境时。我并没有说明这点。

    可是实事上在最后的结果中能看到"Generating lua bindings succeeds"这种提示,聪明的读者一定猜到了它所完毕的工作就是绑定C++类至Lua


      接下来。打开 "genbindings.py,假设你对Python语言并不熟悉。哪请忽略其他的代码,仅仅须要把你的视线焦点集中在 133 行至 151 行。

    // 指定tolua所在的录径 无需改动

    tolua_root = '%s/tools/tolua' % project_root 


    // 指定绑定脚本运行后,产生的绑定一系列文件输出保存于何路径

    // 尽管无需改动,可是我们要记住,我们产生的绑定文件是输出于

    // "F:Cocos2dx-LuaGarfieldframeworkscocos2d-xcocosscriptinglua-bindingsauto"

    output_dir = '%s/cocos/scripting/lua-bindings/auto' % project_root


    // 这个数组中指定了要运行绑定脚本的一些配制參数 ,看到第一行。'cocos2dx.ini' 是一个配制文件,我们能够在"genbindings.py"同级文件夹中找到它。‘cocos2d-x’实际上是在 'cocos2dx.ini' 配制文件里的第一行所指定的一个字符常量,主要是用于生成绑定桥接文件时。为诸如条件编译 ifndef 及 生成的注冊自己定义类接口取名所用。一会我将会在后面稍提这点,这里假设不明确。请临时忽略它。‘lua_cocos2dx_auto’是给生成的绑定桥接文件指定的言语件名。

    cmd_args  = {'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'),

                          ... ...

    }




         了解"genbindings.py"之后在它的同级文件夹你能够找到cocos2dx.ini“,这是与之息息相关的配制文件。打开它,我们稍做了解。


       

        请关注于 第 1、4、8、25 、29行。

        还记得上面我们提到的数组吗?

        cmd_args  = {'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'),

                          ... ...

        }

        第 1 行就是第二个參数指定的字符内容 

        第 4 行是一些条件编译 ifndef 及 生成的注冊自己定义类接口取名所用的前缀。前面我们已经提到过。

        第 8 行是指定该绑定类的命名空间

        第 25 行指定须要绑定的自己定义类头文件路径

        第29行 指定绑定的C++自己定义类导出后的Lua类文件名称



        了解这些之后。我们将对这两个文件进行一些改动,用于完毕我们的类至Lua的绑定。

         首先我们拷贝一份'cocos2dx.ini',将其命名为 'custom_pet.ini'。拷贝一份'genbindings.py',将其命名为 'custom_pet_genbindings.py'


         修改'custom_pet.ini'第 1、4、8、25 、29行。例如以下:

         由于我们没有指定名字空间。所以第 8 行'target_namespace'将其赋空。

         而'headers'其中仅仅是相对路径的给定。还记得"Pet"类我们是创建于哪里吗?

         正是在F:Cocos2dx-LuaGarfieldframeworks untime-srcClasses”。



       

        OK。接下来我们修改'custom_pet_genbindings.py'。关注于第 133 至 138 行,我们将在这里做一些改动。例如以下:

        在cmd_args參数表中,我们指定该Python绑定脚本的配制文件为我们改动好的'custom_pet.ini'

    一些可能会用到的命名前缀为'custom_pet'。指定导出的桥接文件名称为'lua_pet_auto'





       最后。我们运行'custom_pet_genbindings.py'。 

       "Generating lua bindings succeeds"。

       见到它,你该欢呼了:)。你已经完毕了C++自己定义类至Lua的绑定。

       在下一小节中,我们来探索下,怎么样在你的项目中使用Lua调用Pet类。





       

  • 相关阅读:
    Log4Net详解(2)结构篇
    vs2012中使用Spring.NET报错:Spring.Context.Support.ContextRegistry 的类型初始值设定项引发异常
    vs2010无法打开项目文件的解决方法
    Spring.NET使用assembly方式设置配置文件
    WebService生成XML文档时出错。不应是类型XXXX。使用XmlInclude或SoapInclude属性静态指定非已知的类型。
    [转贴]如何做好一个垂直搜索引擎
    怎样预防RSI呢?
    推荐一个打折的站点
    五子棋程序
    共享两本C++的好书
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5134289.html
Copyright © 2011-2022 走看看