`
HeLinHang
  • 浏览: 141721 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Cocos2d-x中Lua与C++交互

 
阅读更多

交互主要是通过栈进行交互,一个lua_State表示一个栈,使用完记得清空栈,栈从下到上分别是1,2,3,4.....,从上到下分别是-1,-2,-3....

 

头文件

#ifndef _SCRIPT_MANAGER_H
#define _SCRIPT_MANAGER_H
#include "Common.h"
extern "C"
{
#include "..\\libs\\lua\\lua.h"
#include "..\\libs\\lua\\lualib.h"
#include "..\\libs\\lua\\lauxlib.h"
};
class ScriptManager
{
	DECLARE_SINGLETON(ScriptManager);
public:
	ScriptManager();
	~ScriptManager();
	static int average(lua_State * m_State);
private:
	lua_State * m_State;
};
#endif

 源文件

 

#include "ScriptManager.h"

DEFINE_SINGLETON(ScriptManager,_scriptManager);
int ScriptManager::average(lua_State * m_State)
{
	//每个函数都有自己的局部私有栈,每当Lua调用一个C函数时,第一个参数总是这个局部栈的索引1,
	//即使这个C函数调用了Lua代码,Lua代码又调用了相同的C函数,这些C函数只看到自己的私有栈,他们的第一个
	//参数都是索引1,完成后会自动清栈
	CCLog("lua call average");
	int size=lua_gettop(m_State);
	CCLog("size fun:%d",size);
	int i=lua_tonumber(m_State,1);
	int j=lua_tonumber(m_State,2);
	lua_pushnumber(m_State,i);
	lua_pushnumber(m_State,j);
	return 2;//结果的数量(一般压人几个就是几)
}

ScriptManager::ScriptManager()//需要注意清空栈
{
	//初始化Lua库
	m_State=lua_open();
	luaL_openlibs(m_State);	
	const luaL_reg libs[]={
		{"average",&ScriptManager::average},
		{NULL,NULL}
	};
	
	luaL_register(m_State,"go",libs);//将Lua要调用的函数注册进来
	lua_pop(m_State,1);//弹出栈的n个元素
	luaL_dofile(m_State,"simple.lua");
	
	//s_100这个table此时位于栈低,从下到上是1,2,3,4递增,从上到下是-1,-2,-3
	lua_getglobal(m_State,"s_s");
	lua_getfield(m_State,1,"name");
	const char * name=lua_tostring(m_State,-1);
	CCLog("name:%s",name);

	lua_getfield(m_State,1,"loop");
	bool loop=lua_toboolean(m_State,-1);
	CCLog("loop:%d",loop);

	lua_getfield(m_State,1,"time");
	int time=lua_tonumber(m_State,-1);
	CCLog("time:%d",time);

	lua_getfield(m_State,1,"script");
	if(!lua_isfunction(m_State,-1))
	{
		CCLog("not function");
	}
	lua_pushnumber(m_State,10);
	lua_pushnumber(m_State,20);
	lua_pcall(m_State,2,1,0);//调用该函数后,会自动清空函数的栈

	int max=lua_tonumber(m_State,-1);
	CCLog("max:%d",max);
	int size=lua_gettop(m_State);
	CCLog("%d",size);

	lua_getglobal(m_State,"width");
	int width=lua_tonumber(m_State,-1);
	CCLog("width:%d",width);

	size=lua_gettop(m_State);
	CCLog("size1:%d",size);

	lua_newtable(m_State);//创建一个table
	lua_pushnumber(m_State,1);//向栈顶压入一个元素
	lua_setfield(m_State,-2,"test");//设置到table中去,这时候栈顶的number弹出栈

	size=lua_gettop(m_State);
	CCLog("size3:%d",size);
}

ScriptManager::~ScriptManager()
{
	lua_close(m_State);
}

 

 simple.lua

s_s=
{
	name="gameone";
	loop=false;
	time=20;

	script=function(x,y)
	i,j=go.average(x,y);

		if x>=y then
				return x+i;
		else
				return y+j;
		end
	
	end
}

width=10;
height=20;

 

分享到:
评论

相关推荐

    cocos2d-x+lua游戏demo源码

    cocos2d-x+lua游戏demo源码 xcode工程

    Cocos2d-x游戏编程——C++篇 .iso

    Cocos2d-x游戏编程——C++篇(电子工业出版社,徐飞 著)书本配套的光盘代码,

    Cocos2d-x实战lua卷

    最新版的cocos2d-x实战 lua卷,分享给大家

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    Cocos2d-x之Lua核心编程 配套代码

    Cocos2d-x之Lua核心编程 配套代码,没有对应的pdf的书,下载前请看清楚啊!

    Cocos2d-x之C++和Lua通信5个入门Demo

    木头Cocos2d-x教程 Lua篇 Demo源代码。 教程地址: 第1章:http://blog.csdn.net/musicvs/article/details/8440707 第2章:http://blog.csdn.net/musicvs/article/details/8440919 第3章:...

    Cocos2d-x之LUA脚本引擎深入分析

    Cocos2d-x之LUA脚本引擎深入分析

    关东升-Cocos2d-x实战:Lua卷

    《Cocos2d-x实战 Lua卷》是介绍Cocos2d-x Lua游戏编程和开发技术的书籍,本书是第1版,带完整书签

    《Cocos2d-x实战 Lua卷》源码.7z

    《Cocos2d-x实战 Lua卷》源码.7z

    cocos2d-x-2.1.5

    cocos2d-x-2.1.5

    Cocos2d-x实战_Lua卷 _第2版

    Cocos2d-x实战_Lua卷 _第2版

    cocos2d-x事件类

    在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...

    Cocos2d-x高级开发教程

    书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关知识点。此外,书中的教学资源获得《捕鱼达人》手机游戏的授权,读者可以从一流游戏开发中高起点地...

    大富翁手机游戏开发实战基于Cocos2d-x3.2引擎

    资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...

    龙灵修-讲Lua的cocos2d-x进阶视频.rar

    cocos2d-x进阶教程1_4Lua中函数、条件判断语句.mp4 cocos2d-x进阶教程1_5Lua中循环语句和逻辑运算关键字.mp4 cocos2d-x进阶教程1_6LuaTable使用1.mp4 cocos2d-x进阶教程1_7LuaTable使用2.mp4 cocos2d-x进阶教程1_8...

    Cocos2d-x之Lua核心编程_配套代码

    Cocos2dx Lua开发的核心技术。本书从Lua语言基础开始,全面介绍了Cocos2dx Lua的基础知识、基本应用和高级编程技术,并最终介绍了游戏的实战开发。全书贯穿理论结合实践的编写方式,各个章节都提供了配套实例。

    Cocos2d-x实战 Lua卷 最高清的扫描版 珍藏

    Cocos2d-x实战 Lua卷 最高清的扫描版 珍藏

    cocos2d-x-3.2旧版引擎下载

    cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656

    cocos2d-x实战项目

    cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...

Global site tag (gtag.js) - Google Analytics