摘抄(lua)

lua脚本是如何应用到游戏引擎中的?

简单来说,就是把一些经常改动的代码用脚本实现。

/


首先得有这样的需求,希望将经常变动的逻辑(或者说由策划编写的逻辑)在一定的C++框架下可以通过脚本简单快速的拼出来,并且频繁修改,不需要重新编译出包就能快速更新,这里包含了两个需求:
频繁变更的逻辑,不希望频繁重新编译整个游戏
有固定的框架约束,脚本拼装简单到通过工具甚至脚本策划自己就能写完

其次,整个产品组认可这种开发模式,有适合的人做C++框架定接口、做编辑器、写脚本,能接受引入脚本带来的性能略有降低以及调试不便等副作用。

另外,Lua脚本由于其作为配置型脚本的出生,很适合用来作为配置文件或者定义文件(比如各种编辑器生成的数据文件),再往前走一步,连策划数据(通常在Excel中编辑的那些,如果没有专门的逻辑编辑器的话)都可以全部导出成Lua脚本,无论读写都很灵活,同时还保持了纯文本的可检查性。


https://www.zhihu.com/question/24387207/answer/27659369
/

Lua 为什么在游戏编程领域被广泛运用?

历史方面:
《大话西游》用的脚本语言是微软的JScript(JavaScript的一种方言),维护不便bug多,受系统IE版本的影响兼容性差。所以2002年网易开发《大话西游II》时,决定在客户端内嵌别的脚本语言。当时该项目技术负责人云风认为要挑不出名的语言,让做外挂的人搞不懂(《大话西游》一代被外挂《月光宝盒》搞死了),于是就选择了Lua 4.0。
云风在九十年代就开发游戏引擎并建设个人网站(云风工作室),在游戏开发领域声望高。网易《大话西游II》是首个在市场上取得成功的国产网络游戏。所以后来国内游戏开发行业纷纷受此影响采用Lua
......

最后我想说,开发游戏并不一定要脚本语言。C/C++这类低级语言写逻辑太不方便,脚本语言能弥补这个缺陷。但如果你的项目主要语言不是C/C++,而是D、Java、Scala、Haskell、Go、C#、F#等性能接近C/C++的高级语言,那么你就不需要额外的脚本语言。王垠写过什么是“脚本语言”,和我的看法基本相同。
当然还有Haxe这种既可以编译成脚本语言,也可以编译成C++的古怪语言来捣蛋。

https://www.zhihu.com/question/21717567/answer/19099371
///


Language are accepted and evolved by a social process, not a technical or technological one. Successful languages must have modest or minimal computer resource request.

https://www.zhihu.com/question/21717567/answer/19156327
/

先放一张源码行数对比表:



放心,我不是来说Lua有多么简洁多么美妙,问题不在这里。问题是:为什么Lua这么短?
任何一种程序,它所包含的逻辑功能大致和源码规模是相关的。任何一种实用性的语言都不可能比Lua的源码规模更小,而且未来Lua也不会变大很多,原因是——Lua严格限制了自己要解决的问题,从而把语言特性限制在一个非常有限的范围之内。

https://www.zhihu.com/question/21717567/answer/229327361

//

找不到lua_open
        使用lua5.2发现编译器找不到lua_open函数,最后发现这个函数在5.2中已经被遗弃,被新的函数luaL_newstate和lua_newstate替代。lua_newstate可自定义内存分配函数,luaL_newstate使用默认的内存分配方式。

///

  1. #ifdef lua5.1  
  2. //5.1 下直接使用luaL_register 就好  
  3.     luaL_register(L, "libname", funcs);  
  4. #else //lua5.2  
  5.     lua_newtable(L);   
  6.     //先把一个table压入VS,然后在调用luaL_setfuncs就会把所以的func存到table中  
  7.     //注意不像luaL_register这个table是个无名table,可以在的使用只用一个变量来存入这个table。  
  8.     //e.g local clib = require "libname". 这样就不会污染全局环境。比luaL_register更好。  
  9.     luaL_setfuncs(L, funcs, 0);  
  10. #endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值