• 在cocos2d-x中使用LUA


    在cocos2d-x中使用LUA

    1、注冊LUA脚本引擎

    CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);
    

    2、运行一段LUA字符串

    luaEngine->executeString("print("test executeString\n")");
    

    3、运行一个LUA文件

    luaEngine->executeScriptFile(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath("hello.lua"));
    

    4、运行LUA中的一个全局方法

    luaEngine->executeGlobalFunction("test");	// 运行LUA中的test方法
    
    
    // lua function
    function test()
        print("I'm lua function")
    end
    

    5、运行LUA中的某个带參数的方法并获取返回值

    lua_State* state = luaEngine->getLuaState();
    lua_getglobal(state, "myadd");	//查找lua_add函数,并压入栈底    
    luaEngine->pushInt(5);		//函数參数1  
    luaEngine->pushFloat(6.5);	//函数參数2
    lua_pcall(state, 2, 1, 0);	//调用myadd函数,同一时候会对myadd及两个參加进行出栈操作,并压入返回值
    float result = lua_tonumber(state, -1);	//从栈中取回返回值   
    lua_pop(state, 1);	//清栈,因为当前仅仅有一个返回值 
    printf("result is %f
    ", result);
    
    
    // lua function
    function myadd(x, y)
        return x + y
    end
    

    6、在LUA中运行C++中的一个全局方法

    1)、编写C++中的全局方法

    int add(lua_State* L)
    {
        int a = lua_tointeger(L, 1);
        int b = lua_tointeger(L, 2);
    	
    	lua_pushinteger(L, a + b);	//入栈返回值
    	return 1;	//1表示压入栈数据个数 
    }
    

    2)、在C++中注冊方法:

       lua_register(state, "lua_add", add); // 第二个參数为将在LUA中用到的方法名,第三个參数为C++中相应的全局函数

    3)、在LUA中调用方法:

    lua_add(2, 3);

    7、在LUA中调用C++的对象及对象的方法

    1)、在C++中编写一个C++的类。

    #ifndef _HELLO_CLASS_CTEST_
    #define _HELLO_CLASS_CTEST_
    
    #include <iostream>
    
    class CTest
    {
    public:
    	int v;
    	
    public:
    	CTest() { v = 1; }
    	CTest(int a) { v = a; }
    	
    	void test()
    	{
    		printf("[CTest::test]hello,tolua++|(%d).
    ", this->v);
    	}
    
    };
    
    #endif
    

    2)、编写PKG文件。

    // 假设要包括C/C++的头文件。使用 $#include "xxx.h"
    // 假设要包括其他的PKG文件。使用 $pfile "xxx.pkg"
    $#include "CTest.h"
    
    class CTest
    {
    	int v;
    	CTest();
    	CTest(int a);
    	void test();
    };
    

    3)、运行tolua++,生成lua_CTest.cpp文件。

    tolua++ -n CTest -o lua_CTest.cpp CTest.pkg

    4)、将生成的文件增加到project。

    5)、在LUA中使用C++的CTest对象。

    tolua_CTest_open(state); // 这种方法的名称中的CTest取决于运行tolua++时-n后的參数
    std::string str = "t = CTest:new(); t:test();";  // 当然也能够把LUA命令写到lua文件里,然后直接运行lua文件。
    luaEngine->executeString(str.c_str());
    
    // 要顺利的调用到tolua_CTest_open方法,还须要把lua_CTest.cpp文件里的方法声明取出并放到合适的地方。

    // TOLUA_API int tolua_CTest_open (lua_State* tolua_S);

  • 相关阅读:
    Hive的安装和建表
    在MarkDown中插入数学公式对照表(持续更新)
    Beta版本冲刺总汇
    a版本十日冲刺总汇
    “我们只是信息的搬运工”
    调查报告
    Beta版本冲刺第七天
    Beta版本冲刺第六天
    Beta版本冲刺第五天
    Beta版本冲刺第四天
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10799483.html
  • Copyright © 2020-2023  润新知