zoukankan      html  css  js  c++  java
  • 在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);

查看全文
  • 相关阅读:
    Delphi中Android运行和JNI交互分析
    C++ 中内存分配和回收
    Delphi Android程序启动过程
    Delphi XE的RTTI增强,动态Hook某些内部事件
    Win7下超级管理员创建普通权限任务
    再探Delphi2010 Class的构造和析构顺序
    Delphi2010新发现-类的构造和析构函数功能
    【背包专题】01背包
    Delphi2010的RTTI增强
    用WebBrowser实现HTML界面的应用和交互 good
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10799483.html
  • Copyright © 2011-2022 走看看