自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(19)
  • 收藏
  • 关注

原创 [转]关注XNA

[翻译+原创] 关注XNA       不晓得Microsoft啥时候喊出的XNA,有人说从2002年都开始了,可现有的带有确切时间的文献却是在2004年3月。不过不管怎么说也是一年有余了,却没有广泛为人所知,我也是前些天才从朋友那里知道这个东西,不知会不会像Microsoft的其它某些东西一样再过些日子就无疾而终了。我们来一起追踪一下吧。       以下是来自XNA首页上的内容:引用 [出处:

2005-03-25 15:24:00 691

原创 在你的游戏中应用Lua(4):做为配置语言

任何一种语言的存在都是为了表达,做为一种动态配置的语言,Lua提供给我们非常强大也非常的灵活的表达方式。 Lua是一种动态类型的语言,它只有几种基本的类型:nil,boolean,number,string,userdata,function,thread和table。Nil,boolean,number,string这些与其它语言都类似。由于Lua实现了动态内存管理,所以在使用strin

2005-01-14 17:37:00 1265

原创 在你的游戏中应用Lua(3):Using Lua in cpp(基本数据类型、指针和引用)之二

现在首要的问题在于,我们希望通过某种方式,在编译期获得一个模板参数T是不是一个指针或者一个引用?幸运的是,boost库已经提供了这样的功能,boost提供了一组type_traits,让我们能够在编译期获取模板参数T的类型。 你可以从http://boost.sourceforge.net/index.htm ;下载boost库,我们需要的是boost的type_traits一组头文件。

2005-01-14 17:34:00 986

原创 在你的游戏中应用Lua(3):Using Lua in cpp(基本数据类型、指针和引用)之一

Using Lua in cpp(基本数据类型、指针和引用) 前面介绍的都是针对cpp中的内建基本数据类型,然而,即使是这样,在面对指针和引用的时候,情况也会变得复杂起来。使用前面我们已经完成的宏lua_register_directclosure只能注册by value形式的参数的函数,当参数中存在指针和引用的时候(再强调一次,目前只针对基本数据类型):1、 如果是一个指针,通常

2005-01-14 17:33:00 1418

原创 在你的游戏中应用Lua(3):using lua in cpp(注册不同类型的c函数)之二

在解决了传递函数指针的问题之后,让我们来看看调用函数时会有一些什么样的问题。 首先,当我们通过函数指针调用这个函数的时候,由于我们面对的是未知类型的函数,也就是说,我们并不知道参数的个数,参数的类型,还有返回值的类型,所以我们不能直接从lua栈中取得参数,当然,我们可以通过运行时测试栈中的信息来得到lua传递进来的参数的个数和类型,这意味着我们在稍后通过函数指针调用函数时也需要动态的根据参

2005-01-14 17:31:00 1724

原创 在你的游戏中应用Lua(3):using lua in cpp(注册不同类型的c函数)之三

下面,让我们集中精力来解决Call重载函数的问题吧。 前面已经说过来,Call重载函数接受一个函数指针,然后从lua栈中根据函数指针的类型,取得相关的参数,并调用这个函数,然后将返回值压入lua栈,类似于这样://伪代码int Call(pfn, lua_State *L, int idx)现在的问题是pfn该如何声明?我们知道这是一个函数指针,然而其参数,以及返回值都是未知的类型

2005-01-14 17:31:00 1812 2

原创 在你的游戏中应用Lua(3):using lua in cpp(注册不同类型的c函数)之一

前面说到,我们可以利用lua提供的api,向脚本提供我们自己的函数,在lua中,只有lua_CFunction类型的函数才能直接向lua注册,lua_CFunction实际上是一个函数指针:typedef int (*lua_CFunction)(lua_State *L); 而在实际的应用中,我们可能需要向lua注册各种参数和返回值类型的函数,例如,提供一个add脚本函数,返回两个值的和

2005-01-14 17:30:00 2274

原创 在你的游戏中应用Lua(3):using lua in cpp(封装栈操作)

前面提到了lua与主机程序是通过一个运行时栈来交换信息的,所以我们把对栈的访问做一下简单的封装。 我们利用从c++的函数重载机制对这些操作做封装,重载提供给我们一种以统一的方式来处理操作的机制。向lua传递信息是通过压栈的操作来完成的,所以我们定义一些Push()函数:inline void Push(lua_State *L, int value);inline void Pus

2005-01-14 17:29:00 1290

原创 在你的游戏中应用Lua(3):using lua in cpp

lua和主机程序交换参数是通过一个运行时栈来进行的,运行时栈的信息放在一个lua_State的结构中,lua提供的api都需要一个lua_State*的指针,除了一个: lua_open();这个函数将返回一个lua_State*型的指针,在你的游戏代码中,你可以仅仅拥有一个这样的指针,也可以有多个这样的指针。最后,你需要释放这个指针,通过函数:lua_close(L);注

2005-01-14 17:28:00 1346

原创 在你的游戏中应用Lua(2):扩展Lua

Lua本身定位在一种轻量级的,灵活的,可扩充的脚本语言,这意味着你可以自由的扩充Lua,为你自己的游戏量身定做一个脚本语言。 你可以在主机程序中向脚本提供你自定的api,供脚本调用。Lua定义了一种类型:lua_CFunction,这是一个函数指针,它的原型是:typedef int (*lua_CFunction) (lua_State *L);这意味着只有这种类型的函数才能向L

2005-01-14 17:26:00 2070

原创 在你的游戏中应用Lua(1):调用函数

假设你在脚本中定义了一个函数: function main(number)number = number + 1return numberend在你的游戏代码中,你希望在某个时刻调用这个函数取得它的返回值。在Lua中,函数等同于变量,所以你可以这样来取得这个函数:lua_getglobal(L, "main");//函数现在栈顶现在,我们可以调用这个函数,并传递给它正确的参

2005-01-14 17:25:00 1578

原创 在你的游戏中应用Lua(1):Getting Value

在上一篇文章我们能够在我们的游戏代码中执行Lua解释器,下面让我们来看看如何从脚本中取得我们所需要的信息。 首先,让我来简单的解释一下Lua解释器的工作机制,Lua解释器自身维护一个运行时栈,通过这个运行时栈,Lua解释器向主机程序传递参数,所以我们可以这样来得到一个脚本变量的值:lua_pushstring(L, "var"); //将变量的名字放入栈lua_gettatbl(L, 

2005-01-14 17:24:00 1198

原创 在你的游戏中应用Lua(1):在你的游戏代码中运行解释器

通常,你希望在你的游戏开始的时候读取一些信息,以配置你的游戏,这些信息通常都是放到一个文本文件中,在你的游戏启动的时候,你需要打开这个文件,然后解析字符串,找到所需要的信息。     是的,或许你认为这样就足够了,为什么还要使用Lua呢?    应用于“配置”这个目的,Lua提供给你更为强大,也更为灵活的表达方式,在上一种方式中,你无法根据某些条件来配置你的游戏,Lua提供给你灵活的表

2005-01-14 17:23:00 1653

原创 Hello, World!

我们的第一个lua程序也将从一个经典的hello, world!程序开始 打开任何一款你喜欢的文本编辑器,写下一行print("hello, world!")保存这个文件,扩展名为.lua打开命令行,假设你编译的解释器名字为lua.exe,保存的文件为test.lua运行 lua test.lua 程序输出: hello, world!注意,可执行文件的路径必须设置正确 

2005-01-14 17:21:00 815

原创 StartUp

编译运行Lua 下完源代码之后,你需要编译Lua,Lua是用ansi c写的,所以任何支持c 编译器的平台都支持编译Lua,通常,我们在Windows平台下编译它。首先介绍一下Lua解压后的目录结构../bin/ 可执行文件目录,通常编译生成的Lua解释器和编译器将被放置到此目录下../doc/ 文档,包含参考手册../etc/ 其它一些Lua工具及其代码../incl

2005-01-14 17:19:00 1067

翻译 Programming in Lua翻译--Functions

5.Functions函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用2.计算并返回值,这种情况下函数作为赋值语句的表达式使用.语法:function func_name (arguments-list) statements-list;end;调用函数的时候,如果参数列表为空,必须使用()表明是函数调用. print(8*9, 9/8)    a = math.sin(3) +

2005-01-13 22:56:00 887 1

翻译 Programming in Lua翻译--Statements

4.StatementsLua像C和PASCAL几乎支持传统的语句:赋值语句,控制结构语句,函数调用等,同时也支持非传统的多变量赋值,局部变量声明.4.1 赋值语句 赋值是改变一个变量的值和改变表域的最基本的方法.  a = "hello" .. "world"     t.n = t.n + 1 Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的

2005-01-13 22:55:00 714

翻译 Programming in Lua翻译--Expressions

3.ExpressionsLua中的表达式包括数字常量,字符串常量,变量,一元和二元运算符,函数调用.还可以是非传统的函数定义和表构造.3.1 算术运算符 二元运算符:+ - * / ^  (加减乘除幂) 一元运算符:- (负值) 这些运算符的操作数都是实数.3.2 关系运算符    =  ==  ~= 这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认

2005-01-13 22:54:00 759

翻译 Programming in Lua翻译--Types and Values

2.Types and ValuesLua是动态类型语言,变量不要类型定义.Lua中有8个基本类型:nil, boolean, number, string, userdata, function, thread, and table.  print(type("Hello world"))  --> string    print(type(10.4*3))         --> number

2005-01-13 22:52:00 872

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除