从 0 开始学游戏开发
蔡能
原网易游戏引擎架构师,资深游戏底层技术专家
37243 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
从 0 开始学游戏开发
15
15
1.0x
00:00/00:00
登录|注册

第19讲 | 如何嵌入脚本语言?

Python、Ruby拥有大量成熟库和框架
Lua虚拟机简单、高效
使用pcall调用脚本文件,处理运行时错误
载入文件并不运行,检查基础语法
初始化虚拟机并打开Lua类库
Lua的堆栈
Lua读取脚本的两种方法
Lua下标以1为初始值
Python、Ruby执行效率远逊于Lua的原因
Lua脚本轻量级,执行效率媲美C/C++
大型游戏使用脚本语言编写代码
硬件提升使加载MP3音乐文件成为可能
硬件资源限制导致加载WAV格式
使用配置文件进行活动逻辑
传统方式:硬代码过多,更新难度大
留下的问题:直接使用luaL_dofile的优劣
Lua错误处理
Lua脚本在C/C++语言里面嵌入的步骤
Lua脚本足够轻量级,执行效率几乎可以媲美C/C++
使用Lua以及liblua.a进行与C语言的绑定操作
三个Lua语言的细节问题
为什么使用Lua脚本嵌入C/C++硬代码?
C/C++语言结合脚本语言编写游戏
小结
如何嵌入脚本语言?

该思维导图由 AI 生成,仅供参考

从 2005 年开始,逐渐流行使用 C/C++ 语言结合脚本语言(Lua、Python、Ruby 等等)编写游戏。这是因为用 C/C++ 编写游戏的传统方式,硬代码太多,而使用硬代码编写的游戏,更新难度很大,除非重新编译一次程序。
于是,就有人开始使用配置文件来做活动逻辑。比如填写好配置表、玩家等级多少、攻击力如何、等于多少的伤害力等等,一开始就将这些内容都读取进代码,在游戏中实时计算出来。
但是这种方法其实也并不方便。很久以前的游戏,由于硬件资源限制,所以一般都加载 WAV 格式。而加载 MP3 则需要机器对音乐文件进行解压缩再播放,如果机器硬件计算能力不好的话,会由于解压缩而导致整个游戏的运行效率下降。
脚本语言也是如此,如果机器硬件能力不好的话,会由于脚本语言的虚拟机要解释程序,导致游戏运行效率下降。随着电脑硬件的提升,我们在游戏中加载 MP3 音乐文件成为可能,而在游戏中加载脚本语言进行逻辑编写当然也是可以的。
《魔兽世界》就是使用 Lua 脚本语言编写的。类似《GTA》等大型游戏,都拥有一套自己的脚本语言和体系。 使用脚本语言,是为了能够在编写硬代码的同时,也能很方便地、不需要重新编译地编写逻辑代码。 事实上,现在很多大型游戏都使用这种方式来编写代码,甚至一些游戏引擎本身,也支持脚本语言和引擎本身所提供的语言分离编写。比如引擎用 C++ 语言编写,脚本语言用 Lua 编写。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何在C/C++中嵌入Lua脚本语言的技术细节。首先,文章强调了使用Lua脚本语言的优势,包括方便编写逻辑代码、不需要重新编译等,并解释了为什么选择Lua脚本语言。作者指出Lua的轻量级和高执行效率,相比于其他脚本语言如Python、Ruby。接着,文章详细介绍了在C/C++中嵌入Lua的步骤,包括头文件的引入、Lua语言的细节问题以及Lua的堆栈。通过示例代码,读者可以了解如何初始化虚拟机、载入和调用Lua脚本文件,并处理错误信息。总的来说,本文深入浅出地介绍了嵌入脚本语言的技术细节,对于想要了解如何在C/C++中嵌入Lua脚本语言的读者来说,是一篇值得阅读的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学游戏开发》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 宋桓公
    编译失败,找不到那些函数 请问这里面不用写关联.a 这个库的代码吗?

    作者回复: 要写的,在IDE里面设置库文件

    2018-08-02
  • 云学
    今天讲解的是在C中调用lua,请问可以在lua中调用c c++程序吗

    作者回复: 你得说明白是调用执行文件?还是调用类库?

    2018-07-19
  • wusiration
    直接使用luaL_dofile无法体现出错误出现在哪,而且是加载lua文件并运行;而用luaL_loadfile和pcall则会体现出语法错误或者是逻辑错误,并将lua文件的加载和运行分开。
    2018-07-30
    4
  • Geek_King@技术爱好者
    想请教一下lua和c的变量怎么共享呢
    2018-07-21
    1
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部