Lua脚本语言学习笔记
2013-01-21 11:49
609 查看
什么是脚本语言?
1.一种解释运行而非编译的计算机语言。2.以文本的形式保存,在被调用时进行解释或编译。
为什么要使用LUA脚本语言?
1.提高工作效率。项目规模扩大,编译源代码所需时间变长。为了不因为一些小的改动(改变几个常量的值),就去编译整个项目,所以使用脚本语言。2.提高创造性。使用lua脚本,不仅可以帮你初始化变量,还可以帮你创建游戏逻辑甚至是游戏对象。
3.增加扩展性。使用lua脚本,可以让玩家自己创建Mods,写一下插件(如魔兽世界允许玩家通过插件修改其用户界面)。
4.轻量级的Lua。可扩展,简易学性,效率,可移植,支持面向过程和面向对象,自动内存管理,etc。
在windows上配置lua的运行和开发环境
1.下载LuaForWindows,安装Lua。2.把Lua安装目录下的include和lib加入IDE的目录里面。
3.Lua自带了一个脚本编辑器,所以新建一个文本test.lua,右键点击Edit Script就进入了编辑器。
lua=1; print ("Hello") print (lua); while lua == 1 do end
保存
4.双击test.lua就能看到效果。
在Code::Blocks IDE中编写Lua与C/C++交互的程序
1.新建一个控制台工程test.cbp。
2.加入安装目录的lib加入到project->build options->linker settings里面。
3.编写test.lua文件,放到和test.cbp在一个文件夹下。
age=10; name="yangzan"; salary=10000; height=180; isMale=true; print "this is test.lua"
4.编写main.cpp.
#include <iostream> extern "C" { #include <lua.h> #include <lualib.h> #include <lauxlib.h> #include <string.h> } using namespace std; class Human { private: int age; char name[10]; double salary; double height; bool isMale; public: void init(lua_State *ls) { lua_settop(ls,0); lua_getglobal(ls,"age"); lua_getglobal(ls,"name"); lua_getglobal(ls,"salary"); lua_getglobal(ls,"height"); lua_getglobal(ls,"isMale"); if (lua_isnumber(ls,1) == 1) { age=(int)lua_tonumber(ls,1); } if (lua_isstring(ls,2) == 1) { strcpy(name,lua_tostring(ls,2)); } if (lua_isnumber(ls,3) == 1) { salary=(double)lua_tonumber(ls,3); } if (lua_isnumber(ls,4) == 1) { height=(double)lua_tonumber(ls,4); } if (lua_isboolean(ls,5) == 1) { isMale=(bool)lua_toboolean(ls,5); } } void printInfo() { cout<<age<<endl; cout<<name<<endl; cout<<salary<<endl; cout<<height<<endl; cout<<isMale<<endl; } }; int main() { Human hm; lua_State * L; L = luaL_newstate(); luaL_openlibs(L); luaL_dofile(L,"test.lua"); hm.init(L); hm.printInfo(); lua_close(L); getchar(); return 0; }
5.编译运行
在c或cpp中调用Lua脚本中的函数
1.Lua函数也是一种数据类型。要调用Lua的函数,首先要把函数放到堆栈上。2.把函数所需要的参数放到堆栈上。
3.调用lua_call调用函数。
4.函数调用后,会把参数弹出,然后把函数返回值放到堆栈上。
5.在main.cpp中
double a,b,ave; a=10.09; b=31.123; lua_getglobal(L,"average"); //把函数放到堆栈上 if (lua_isfunction(L,-1) == 1) //判断栈顶元素是不是函数 { lua_pushnumber(L,a); //把a放到栈顶 lua_pushnumber(L,b); //把b放到栈顶 lua_call(L,2,1); //调用average函数 //第二个参数是被放到堆栈上的参数个数 //第三个参数是函数返回参数的个数(lua函数可以返回多个值) //调用函数后,参数会自动弹出,并把函数返回值放在栈上 ave=lua_tonumber(L,-1); } lua_pop(L,1); cout<<"a和b平均值为"<<ave<<endl;6.在test.lua中
function average(a,b) return (a+b)/2 end;
相关文章推荐
- lua脚本语言学习笔记(二)---LUA函数\数组\迭代器
- 脚本语言Lua简单入门学习笔记
- lua学习笔记 2 android调用Lua。Lua脚本中实现添加Button,并为Button增加Listener
- 脚本语言lua笔记(3)table表的用法
- 脚本语言lua笔记(5)c++调用lua
- Redis基础学习--脚本(Lua语言)
- JavaScript--基于对象的脚本语言学习笔记(三)
- Redis学习笔记六:独立功能之 Lua 脚本
- 脚本语言lua笔记(4)数学函数
- 【脚本语言系列】关于lua深度学习,你需要知道的事
- lua学习笔记之-语言基础
- shell脚本语言学习笔记-2
- shell脚本语言学习笔记-3
- shell脚本语言学习笔记-4
- Lua脚本学习笔记
- InstallShield 脚本语言学习笔记
- lua学习笔记 1 android 调用Lua, Lua脚本中启动Intent
- LUA脚本语言第二课(笔记)
- JavaScript--基于对象的脚本语言学习笔记(一)
- JSP学习笔记1_JSP脚本语言(来自李刚的JAVAEE)