- 博客(47)
- 收藏
- 关注
原创 lua版本历史
版本号说明:* 版本号由 "主版本号.次版本号.修正版本号"组成。修正版本号为0时可以忽略。* 主版本号与次版本号统称为版本号,相同版本号的版本它们的参考手册是相同的,虚拟机、字节码及相关的库是兼容,即ABI(Application Binary Interface)兼容的。* 如果只是修复一些bug,则只增加修正版本号。* 如果增加了一些功能,则增加次版本号,同时修正版本号复0。* 如...
2019-02-26 11:35:33
3061
1
原创 如何阅读lua的字节码
本文简单介绍一下如何阅读lua的字节码。有以下lua源码:--文件名:main.lualocal a = 123local b = 456function foo() local c = 1 return 1, 123, aend我们使用luac这个工具(使用lua源码可以编译出来)可以查看这段代码对应的字节码是怎样的,使用以下命令(windows下...
2018-03-16 17:50:13
2538
原创 为什么Lua虚拟机指令的格式是BCAop而不是CBAop?
lua的虚拟机指令数据是长度为32位(unsigned int或unsigned long)。其中低6位是操作码,接下来8位是参数A,紧接着是9位的参数C,最后是9位的参数B。 那它的格式是BCAop。为什么不是CBAop呢?按字母顺序命名不好吗? lua的作者roberto是这样解释的:http://lua-users.org/lists/lua-l/2015-05/msg00491.htm...
2018-03-04 21:36:08
341
原创 文件描述符与文件句柄
在我们日常编程中经常会遇到文件描述符(file descriptor)和文件句柄(file handler)这两个概念,特别是需要开发跨平台(跨windows和linux)项目的时候会被这两个概念搞得很头痛,所以下面来说说它们是什么东西及它们的区别与联系。文件描述符本质是一个索引号(非负整数),系统用户层可以根据它找到系统内核层的文件数据。这是一个POSIX标准下的概念,常见于类Uni...
2018-03-02 20:52:41
9410
1
原创 编译luamongo
想试一下mongodb的lua驱动,去github下了一个luamongo,结果走上一条不归路啊。 首先luamongo封装了mongodb的C++接口,而且还用到了bootst,而我这两者都没有。 网上下载了bootst和mongodb,结果发现mongodb这货编译要用到python和scons,又去下载了python和scons。 又折腾了一个环境变量,终于可以
2014-02-26 21:31:11
3163
2
原创 lua5.2参考手册已经翻译好了
英文水平有限,恐怕有误译,欢迎讨论指正。 文档是wps格式的,可以用word直接打开,不过推荐使用wps ^_^。
2014-01-25 12:32:21
3284
23
原创 lua的前景??
除了专业的游戏公司,貌似很少人在用lua来做开发啊,国内的lua社区越来越不行了。 lua还在不断的发展,但每次新版本c接口都改动很大,项目想要升级有点困难啊。 lua还有前途吗?
2013-09-17 21:15:33
6359
2
原创 修改lua_tinker以支持lua5.2
由于lua_tinker是在lua5.0的时候开发的,后来作者不知道哪去了,也不维护一下。还好lua5.1对c接口的改动不大,所以lua_tinker可以不作任何修改就可以支持lua5.1。但lua5.2的一项修改是去掉了LUA_GLOBALINDEX这个宏,所以lua_tinker中用到的lua_settable(L, LUA_GLOBALINDEX)和lua_gettable(L, LUA
2013-08-13 11:55:31
3202
1
原创 最近
最近开始忙着搞新项目,所以都没时间来更新博客(不过反正也没什么人来看,呵呵)。新项目我的主要工作还是写Lua脚本,目前写了一个关卡框架给策划折腾,由于目前还在研发初期,需求不稳定,所以也没有开发一个配套的编辑器给策划用,策划现在是手工用脚本来当配置文件,目前也配了40多个关卡,尽管玩法很简单。 有空的时候我也写一些服务端和客户端的小功能,比如一些脚本接口,界面处理之类的,还没真正写过一个
2013-07-10 00:07:10
1574
原创 关于如何释放lua table占用的内存
table的大小是动态变化的。看如下代码:tb = {1,2,3} --数组大小4,hash表大小1(不管hash表有没有存数据,它的大小最小为1)tb[5] = 5tb[100] = 100 --数组大小4,hash表大小2因为后插入的两个数的key过于离散,所以它们被保存到hash表中。最终tb的大小为4+2=6。这时我们对table进行删除操作:tb[1] =
2013-06-07 18:10:05
13981
原创 关于lua数字for循环的实现
看以下代码:for i=1,2 do print(i) i=3end输出是什么?如果习惯了C/C++语言,会觉得因为改变了控制变量i为3,所以在执行第二次循环体之前判断不通过,所以输出是1。但结果输出是1和2,即虽然改变了i,但循环还是执行了2次。这是为什么呢?看了lua的源代码,发现在语法分析阶段,表达式中的i(也叫控制变量)和循环体中的i并不是一个值,其实表达
2013-05-23 17:32:42
26938
原创 关于lua table的实现
以下内容只作本人学习笔记,内容会随着我对lua源码分析的深入慢慢修改,所以以下内容只作参考,并非100%正确。 脚本table中的元素在c中是分两个地方存放的,即数组与hash表。table中元素的位置也不是一直固定的,它会根据table被修改的情况动态改变。下面分两种情况说一下table的特点。 第一,先来看构造table时lua是怎么处理的。 如果构造table的
2013-05-22 18:41:35
5756
原创 lua链接dll的问题
lua可以链接专门为lua写的dll,用require就可以了。但有个小地方是需要注意的。有场景如下:1.有一个脚本require.lua,它放在script目录下。2.有两个dll:test.dll,lua.dll,test.dll依赖于lua.dll,它们放在bin目录下。3.script与bin是同级目录。为了使require.lua可以链接test.dll,在脚本要
2013-05-20 19:33:28
8663
1
原创 菜鸟笔记:c/c++中关于lib与dll文件的生成与使用。
当我们的软件大到一定程度的时候,就要考虑将软件划分为多个模块,从而降低软件的复杂度以及复用部分资源。模块的主要表现形式有很多种,其中最常用的就是lib和dll文件。下面简单讲一下lib和dll的生成和使用方法。 先讲一下静态链接与动态链接。静态链接是指在编译的时候就把模块的内容加载进来一起编译,这样编出来的exe文件包含了模块的内容,因此会比较大。而动态链接是指程序在运行时去加载
2013-01-31 21:22:41
3790
2
转载 通信协议中三次握手的故事
在革命战争影片中,经常会看到英勇的解放军战士背着步话机在喊“长江长江,我是黄河,听到请回答。”很明显,这是呼号为黄河的一方想找呼号为长江的另一方说事,为了保证影片的节奏,导演往往把后面的联络过程省略了,其实后面还有两步,长江听到黄河的呼叫后要回答“黄河黄河,我是长江,我听到了你,请回答。”这叫做第二次握手。黄河听到长江的呼叫后还要回答“长江长江,我是黄河,我听到了你,现在请你收报”,这是第三次握手
2012-06-14 17:24:58
3688
原创 Lua学习笔记1
今天上班的时候和程序对一个功能的程序接口,需求是这样的:脚本代码根据配置文件生成一组中奖信息,用table来保存,然后将这个table传给程序接口,程序根据这个table中的数据向玩家显示中奖界面。很简单的一个功能,脚本这边的函数很快就写完了,然后我就琢磨着程序的接口应该怎么写,由于之前没有试过在程序接口中访问lua脚本传过来的table,所以遇到了一些麻烦,上网搜了一下相关资料,总算搞清楚了。现
2012-05-23 22:22:58
9936
转载 游戏业中的脚本
<br /> 脚本不是游戏业的新技术,但脚本为业外的人所知悉,却应归功于《魔兽世界》(以下简称Wow)在世界范围的流行。通过Wow伟大的自定义界面系统,Lua这一脚本语言一举成名天下知。<br /> 虽然Lua的出名有点横空出世的感觉,但游戏业内早就使用脚本来开发游戏了。即便是在国内,我们所熟悉的网游大多数是用脚本开发的。此前已有人士透露,网游的长青树《梦幻西游》和《大话西游2》就大量应用了脚本技术;特别是《大话西游2》,比Wow早几年做了基于Lua脚本的游戏开发。可以说,国内与国外在脚本技术上并不存
2010-10-11 19:45:00
2643
2
转载 经典字符串Hash函数介绍
作者阅读过大量经典软件原代码,下面分别介绍几个经典软件中出现的字符串Hash函数。 2.1 PHP中出现的字符串Hash函数 static unsigned long hashpjw(char *arKey, unsigned int nKeyLength) { unsigned long h = 0, g; char *arEnd=arKey+nKeyLength; while (arKey
2007-05-11 10:24:00
5842
原创 关于LUA中的随机数问题
也许很多人会奇怪为什么使用LUA的时候,第一个随机数总是固定,而且常常是最小的那个值,下面我就简要的说明一下吧,说得不好,还请谅解。我现在使用的4.0版本的LUA,看的代码是5.0的,呵呵 LUA4.0版本中的自带函数库中有两个关于随机数的函数,一个是random,一个是randomseed。random有两个参数,用来设置随机数的范围,比如random(1,10
2006-10-11 10:40:00
15014
原创 我又回来啦,很久没写过文章了,呵呵
话说之前扔下一句我去找工作的话后,我就再也没有写过什么东西了。其实找工作的过程很顺利,只面试了两份工作就进入了一间非常适合自己的公司。话说这间公司在国内游戏界还是挺出名的,我现在被分配到其中一个项目组,此项目组的游戏在去年11月份就开始收费了,目前运营状态良好,呵呵。 唯一有点遗憾的是我的职位并不是3D程序,我现在的工作是写游戏脚本,呵呵。之前对脚本都没什么概念的,不过工作后发现其实学会
2006-03-22 13:55:00
3022
2
原创 新手谈对象内存布局与内存对齐
对于对象的内存布局与内存对齐这个问题,其实是没有统一的说法的,因为实际情况还要联系你的平台与编译器以及编译器的设置。我的是VC7,XP系统,编译器的结构成员对齐设置为默认。下面针对两种情况来说说: 在没有虚拟函数的情况下。对象的内存布局比较简单。看下面的类: class A{ public: int m_a;
2005-10-17 17:33:00
4529
5
原创 C++学习笔记(6)
44.谈谈重载(overload)覆盖(override)与隐藏 这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了,下面说说它们的区别吧。 重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。 覆盖(也叫重写)是指在派生类中重新对基类
2005-10-16 02:41:00
3330
2
原创 DirectX9.0 入门手册(6)
第一次写这种文章,再加上自己也是菜鸟,虽然有部分内容是参考一些书籍及自己翻译一些英文文章所写出来的,但我相信文章里面肯定也还有很多bug,如果你发现了请告诉我,或者你有什么想法也可以和我交流,我诚心和志同道合的人成为朋友,我的QQ是61010818,我的邮箱fowenler@126.com 无论计算机图形技术如何发展,只要它以二维的屏幕作为显示介质,那么它显示的图像即使多么的有
2005-09-27 23:49:00
3382
6
原创 DirectX9.0 入门手册(5)
第一次写这种文章,再加上自己也是菜鸟,虽然有部分内容是参考一些书籍及自己翻译一些英文文章所写出来的,但我相信文章里面肯定也还有很多bug,如果你发现了请告诉我,或者你有什么想法也可以和我交流,我诚心和志同道合的人成为朋友,我的QQ是61010818,我的邮箱fowenler@126.com 第一次写这种文章,再加上自己也是菜鸟,虽然有部分内容是参考一些书籍及自己翻译一些
2005-09-24 00:55:00
4042
原创 DirectX9.0 入门手册(4)
第一次写这种文章,再加上自己也是菜鸟,虽然有部分内容是参考一些书籍及自己翻译一些英文文章所写出来的,但我相信文章里面肯定也还有很多bug,如果你发现了请告诉我,或者你有什么想法也可以和我交流,我诚心和志同道合的人成为朋友,我的QQ是61010818,我的邮箱fowenler@126.com·D3D中的图元简介 在D3D中,一共有三种基本图元,分别是点、线和三角形。点是最简
2005-09-21 23:40:00
3609
转载 一位高级程序员给学弟学妹的建议(转载)
我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且 也没有能力去追赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的 诸如C#, VB.Net 这样的大部头,这让我感到非常痛心。而许多搞不清指针是咋 回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑。C#就 象当年的ASP一样,“忽如一夜春风来,千树万树梨花开”,结果许多学校的信 息学院成了“We
2005-09-21 20:35:00
2645
2
转载 ATL布幔下的秘密之虚函数背后的东西
让我们看看下面这个程序: 程序20. #include <iostream>using namespace std;class Base { public: virtual void fun() { cout << "Base::fun" << endl; } void show() { fun(); }};class Drive : public Base { public:
2005-09-20 23:28:00
1309
原创 DirectX9.0 入门手册(3)
第一次写这种文章,再加上自己也是菜鸟,虽然有部分内容是参考一些书籍及自己翻译一些英文文章所写出来的,但我相信文章里面肯定也还有很多bug,如果你发现了请告诉我,或者你有什么想法也可以和我交流,我诚心和志同道合的人成为朋友,我的QQ是61010818,我的邮箱fowenler@126.com·顶点属性与顶点格式顶点可谓是3D世界中的基本元素。在计算机所能描绘的3D世界中,任何物体都是由多边形
2005-09-20 01:35:00
3917
原创 DirectX9.0 入门手册(2)
第一次写这种文章,再加上自己也是菜鸟,虽然有部分内容是参考一些书籍及自己翻译一些英文文章所写出来的,但我相信文章里面肯定也还有很多bug,如果你发现了请告诉我,或者你有什么想法也可以和我交流,我是诚心想要和志同道合的人成为朋友的,我的QQ是61010818,我的邮箱fowenler@126.com·创建IDirect3D接口DirectX是一组COM组件,COM是一种二进制标准,每一个COM里面提
2005-09-18 19:04:00
3875
1
原创 决定要使自己忙碌起来
要翻译一些有关游戏开发的英文文章,也要边学习DirectX边设计G237游戏引擎,还得设计一款小型3D游戏,人生真是忙碌啊.不过我觉得这样很充实,加油,努力! fight for future!
2005-09-17 03:11:00
1949
原创 DirectX9.0 入门手册(1)
. 这一章我先不写有关DX的东西,我先从最基本的窗口创建讲起,然后再慢慢讲解使用DX的一些内容. 我写这个指南的主要目的是为了学习。我希望自己可以通过写这个指南更快地学会DirectX。同时,我也希望为其他想学习的同伴提供一些学习资料。在编程方面,我并不是很强的人,再加上人总是会犯错的,如果我这些文字给贻笑大方的话,我接受大家对我提出有建设性的批评,如果你有更好的想法要和我交
2005-09-17 03:03:00
4499
原创 看来游戏开发还是很受欢迎啊
我只发了一篇有关游戏的文章,一天之内我的blog点击数就多了将近两百下.不知自己走这条竞争如此激烈的路是否正确.也不管了,谁叫自己喜欢呢,呵呵~
2005-09-15 23:08:00
2082
原创 读书笔记之《Visual C++游戏开发技术与实例》(一)
前天去阳江购书中心想买一些关于DirectX9相关的书,结果找遍整个书店也没找到一本合适的。讲游戏开发的书倒是有几本。去掉几本大部分内容都在讲游戏本身的书后,我选择了两本书,一本就是现在正在读的,书名看标题。另一本是Direct3D中的2D编程,不过是基于DX8.0的,而且很大篇幅都是讲2D,其实也不错,2D也是3D的基础嘛。 昨天看了《Visual C++游戏开发技
2005-09-13 01:18:00
4135
原创 关于复制构造函数
也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生。对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什么用,其实复制构造函数能解决一些我们常常会忽略的问题。 为了说明复制构造函数作用,我先说说我们在编程时会遇到的一些问题。对于C++中的函数,我们应该很熟悉了,因为平常经常使用;对于类的对象
2005-09-05 01:33:00
3020
6
原创 谈谈重载(overload)覆盖(override)与隐藏
这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了,下面说说它们的区别吧。 重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。 覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数
2005-09-02 23:51:00
4453
2
转载 C++中的虚函数
1.简介 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。假设我们有下面的类层次:class A{public: virtual void foo() { cout };class B: public A{public: virtual void foo() { cout };那么,在使用的时候,我们可以:A * a =
2005-09-02 23:20:00
1325
1
转载 VC++中进程与多进程管理的方法
进程 进程是当前操作系统下一个被加载到内存的、正在运行的应用程序的实例。每一个进程都是由内核对象和地址空间所组成的,内核对象可以让系统在其内存放有关进程的统计信息并使系统能够以此来管理进程,而地址空间则包括了所有程序模块的代码和数据以及线程堆栈、堆分配空间等动态分配的空间。进程仅仅是一个存在,是不能独自完成任何操作的,必须拥有至少一个在其环境下运行的线程,并由其负责执行在进程地址空间内的代码。在
2005-08-31 13:49:00
1589
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人