在mugen中运行Lua(仅1.1版本)
本教程由白绝撰写
文章原地址:http://r.abcio.xyz/327345
打开1.1版本主程序的data目录,可以看到有若干个Lua文件
这些就是用Lua语言编写的脚本文件,用记事本就能打开
MUGEN通过这些脚本文件来辅助运行
既然它是文本文件,我们自然就能修改了
PS:Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
根据文件名,可以判断init.lua文件为入口文件,打开后果不其然,其他文件都作为模块被require
命令载入
PS:“init”为“开始”之意
(本教程文本编辑全部使用Notepad2-Mod)
这些就是Lua代码了,学过其他语言的应该能看懂个大概,看不懂的也没关系,直接跳过就好了,有兴趣的也可以点击的链接自学:Lua教程-Runoob
Lua相对其他语言来说难度不高,而且Lua多用于游戏中,学了或许哪天能派上用场呢
继续看init.Lua,在文件头和文件尾能看到一个函数,即mugen.log()
,聪明的你肯定能猜出来,这个函数就是用来记录日志的,而日志文件则在MUGEN运行后在根目录中生成,文件名为mugen.log mugen.log(LogText) --"LogText"参数为记录内容
由此看出,Lua文件在MUGEN还发挥着记录程序运行的作用
那么如果我们要在游戏开始运行的时候搞些事♂情,就要在init.lua文件下手
开始前先普及一个知识,在Lua中,以"--"开头的的内容为注释内容,相当于MUGEN中的";",而多行注释的语法为:
--[[ 多行注释 多行注释 --]]
那么现在我们就开始搞♂事♂情了,以下讲解一个简单的例子:
利用Lua在游戏运行时弹出对话框
上面已经说了,Lua 是一种脚本语言,所以它不具备绘制GUI的功能,所以我们要借助其他方式,这里我选择调用系统API
PS:GUI全称为Graphical User Interface,即图形用户界面
有过其他语言基础的朋友应该知道MessageBox这个系统API,其用于显示一个模态对话框,其函数原型为:int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
其中hWnd为窗口句柄,可省略 ,lpText为消息框的内容,lpCaption为消息框的标题,uType为消息框的按钮类型
uType的值可参考下图:
MessageBox返回一个整数值,表示用户所按的按钮,参考下图:
了解了MessageBox后,要使Lua调用系统API,则需要alien库(15KB),点此下载
其中alien.lua放于data文件夹,alien文件夹放于游戏根目录
alien库下载完毕后,就开始写代码了,代码可写在init.lua的任意位置,为了保证代码的可读性,我写在最末尾,以下是代码:
require "alien" --加载alien库 MessageBox = alien.User32.MessageBoxA --加载MessageBox API MessageBox:types{ret = 'long', abi = 'stdcall', 'long', 'string', 'string', 'long'} --设定类型 MessageBox(0, "是否进入游戏", "提示", 1) --调用API,参数四为1,表示此消息框带是和否两个按钮
要想完全阅读得懂上面的代码,你需要学一些Lua的基础,如果不想学也没关系,直接复制粘贴,然后根据需要修改里面的内容和标题就好了
运行MUGEN:
可以看到效果已经出来了,如果我们要加上实际功能,即点击确定的话进入游戏,点击取消的话退出游戏,则需要继续写代码,因为默认是无论点击哪个按钮后都能进入游戏,所以我们只要给点击取消按钮加上退出的功能即可,完整代码如下:
require "alien"MessageBox = alien.User32.MessageBoxA MessageBox:types{ret = 'long', abi = 'stdcall', 'long', 'string', 'string', 'long'} i = MessageBox(0, "是否进入游戏", "提示", 1)if(i~=1) then--判断用户操作 os.execute("start taskkill /f /t /im mugen.exe")--通过system命令结束mugen进程end
在这里我们添加了一个变量 i 来储存MessageBox的返回值,根据函数原型,返回1即为选择了确定,所以我们这里使用一个if语句来判断,如果不等于1,则退出mugen.exe,当然你可以这样判断if(i==2)
PS:在多数的编程语言中,表示相等应用“==”而不是“=”,在Lua中用“~=”表示不等于
Lua中if语法格式为:
if(布尔表达式) then --[ 在布尔表达式为 true 时执行的语句 --] end
运行MUGEN即能看到效果
Q:运行后没有任何反应?
A:请检查alien库是否已正常载入,代码是否错误,具体查看mugen.log中lua初始化的错误报告
Q:学习Lua需要很长的时间和精力吗?
A:并不,Lua是比较简单的脚本语言,如果你有计算机基础,阅读手册便能懂了,没有的话也不用担心,学起来并不吃力
Q:库文件的路径必须这样吗?
A:不,等你学了Lua后便知道如何修改库文件的默认路径
Q:用Lua可以达到什么效果呢?
A:没有做不到,只有想不到