在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:没有做不到,只有想不到




暂无评论
根据相关规定,发布评论前必须绑定手机前往绑定
你,确定要这么做吗?
正在处理中...