• cocos2dx lua 绑定之一:自动绑定自定义类中的函数


    cococs2dx 3.13.1 + vs2013 + win10

     

    1.首先定义C++类Student

    在cocos2d-xcocos文件夹下新建一个user_define的文件夹放置两个文件。

    注意:这个类没有从Ref继承,是一个简单的C++类。

    ①头文件Student.h 

     1 #pragma once
     2 
     3 #include "base/ccMacros.h"
     4 #include <iostream>
     5 #include <string>
     6 
     7 //注意这个CC_DLL,否则将出现不能找到对应函数错误
     8 class CC_DLL Student
     9 {
    10 public:
    11     //构造/析构函数
    12     Student();
    13     ~Student();
    14 
    15     //get/set函数
    16     std::string get_name();
    17     void set_name(std::string name);
    18     unsigned get_age();
    19     void set_age(unsigned age);
    20 
    21     //打印函数
    22     void print();
    23 
    24 private:
    25     std::string _name;
    26     unsigned _age;
    27 };

      

    ②cpp文件Student.cpp 

     1 #include "user_define/Student.h"
     2 
     3 Student::Student()
     4     :_name("Empty"),
     5     _age(0)
     6 {
     7     std::cout << "Student Constructor" << std::endl;
     8 }
     9 
    10 Student::~Student()
    11 {
    12     std::cout << "Student Destructor" << std::endl;
    13 }
    14 
    15 std::string Student::get_name()
    16 {
    17     return _name;
    18 }
    19 
    20 void Student::set_name(std::string name)
    21 {
    22     _name = name;
    23 }
    24 
    25 unsigned Student::get_age()
    26 {
    27     return _age;
    28 }
    29 
    30 void Student::set_age(unsigned age)
    31 {
    32     _age = age;
    33 }
    34 
    35 void Student::print()
    36 {
    37     std::cout << "name :" << _name << " age : " << _age << std::endl;
    38 }

     

    2.将这两个文件加入到libcocos2d项目中

     

     

    3.修改对应的ini配置文件

    ①在cocos2d-x ools olua里copy文件cocos2dx_csloader.ini(拷贝其它文件也是可行的)并修改文件名为userdefine_student.ini

     

    修改需要的字段值列表如下:

    ②定义在genbindings.py里使用的名字

    [cocos2dx_csloader] 修改为 [userdefine_student]

    ③生成C++中间桥接函数的前缀

    prefix = cocos2dx_csloader 修改为 prefix = userdefine_student

    ④Lua中使用本类的模块前缀(我们不使用模块前缀)

    target_namespace = cc 修改为 target_namespace =

    ⑤头文件的位置

    headers = %(cocosdir)s/cocos/editor-support/cocostudio/ActionTimeline/CSLoader.h 修改为 headers = %(cocosdir)s/cocos/user_define/Student.h

    ⑥需要自动生成的类名

    classes = CSLoader 修改为 classes = Student

    ⑦类中不生成(忽略)的函数,这里我们没有需要忽略的函数,所以清空掉

    skip = CSLoader::[nodeFromXML nodeFromProtocolBuffers createTimeline nodeWithFlatBuffers createActionTimelineNode createNodeWithDataBuffer createTimelineWithDataBuffer ^createNode$]

    修改为

    skip = 

     

    4.修改genbindings.py文件

    ①在cmd_args参数将上面增加的userdefine_student.ini配置进去

    ini文件的名字:(ini文件第一行[]中的参数对应,自动生成数据的文件夹名字)
    'userdefine_student.ini' : ('userdefine_student', 'lua_userdefine_student_auto'), 

    ②如果第二个参数没有对应上,则会产生Section not found in config file的错误。

     

    5.运行genbindings.py重新生成C++中间桥接文件

    可以在cocos2d-xcocosscriptinglua-bindingsauto目录下看到自动生成的两个文件:

    lua_userdefine_student_auto.hpp和lua_userdefine_student_auto.cpp 

     

    6.将函数注册到lua中,找到libluacocos2d项目 

    ①将生成的两个文件加入到项目里

     

    ②在CCLuaStack.cpp文件增加头文件引用

    #include "scripting/lua-bindings/auto/lua_userdefine_student_auto.hpp"

    在init函数里增加函数注册到Lua(在这个函数里,分别注册了auto/manual生成的类)

    register_all_userdefine_student(_state);

     

    7.重新编译项目,在Lua里使用

    1     local student = Student:new()
    2     student:print()

     

    下一篇:《cocos2dx lua 绑定之二:手动绑定自定义类中的函数

  • 相关阅读:
    hdu 1496 equations(哈希)
    为什么要微服务化
    什么是分布式系统中的幂等性
    不积跬步无以至千里
    服务治理与微服务
    使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码 (jvm性能调优)
    Spring MVC重定向和转发
    两个实体复制
    IntelliJ IDEA类头注释和方法注释
    Linux下单机安装部署kafka及代码实现
  • 原文地址:https://www.cnblogs.com/chevin/p/5899516.html
Copyright © 2020-2023  润新知