前言
这节课内容比较多,全是满满的干货,希望各位仔细观看这节课,光写文案就花了我一个多小时。相信大家玩游戏时输入指令都有见过左侧菜单,创建菜单一般分为两种方式,一种方式是使用Panel画上去,这种菜单灵活,可以绘制出各种复杂好看的菜单面板,但是涉及内容较多,而且除了花里胡哨没有实际用处(有兴趣的同学可以自己进行学习),今天讲解的是另一种常用的创建菜单方法。
学习门槛:请确定你掌握了至少一门高级程序设计语言的基础语法,并且拥有开服经验以及掌握了基本的插件安装流程
PS:教程并不一定会长期更新,UP会根据反响来确认后续是否更新,以及更新速度
源码展示

1. 创建菜单函数

RegConsoleCmd函数在第八课已经讲解过,这里就不重复赘述。
这里使用CreateMenu函数创建了一个菜单对象,并没有实际显示,我们需要创建一个Handle类型的变量去接收菜单对象。
第一个参数:菜单响应事件的回调函数,当选择菜单某项时,会默认执行回调函数进行处理。
2. 给菜单对象初始化

SetMenuTitle函数用于设置菜单标题。
第一个参数:菜单对象。
第二个参数:菜单标题。
AddMenuItem函数用于设置菜单选项。
第一个参数:菜单对象。
第二个参数:选项的key,必须唯一,不能重复。
第三个参数:选项文本内容。
可以看到这里使用了一个Format函数,该函数用于处理一些动态数据的格式化。例如,插件在玩家打开菜单之前,并不清楚是哪一个玩家打开的菜单,使用Format函数进行格式化,将玩家ID传入,就可以使每个玩家打开时显示的都是自己的信息。这里解释的并不清晰,可以参考C语言中的sprintf函数的使用。
Format函数用于格式化字符串。
第一个参数:用于存储格式化后字符串的数组。
第二个参数:存储长度。sizeof函数用于计算出传入参数的长度。
第三个参数:需要格式化的字符串。
第四个参数:该参数为可变参数,具体需要根据第三个参数中的占位符(例如:%N)的个数来确定具体的个数。
SetMenuExitButton函数用于设置菜单退出按钮。与之相同的还有一个SetMenuExitBackButton函数,用于设置菜单退出和返回按钮,一般用于多级菜单。
第一个参数:菜单对象。
第二个参数:为true即可。
3. 显示菜单

DisplayMenu函数用于将菜单对象进行显示,此时才是真正的将菜单显示在游戏界面上。
第一个参数:菜单对象。
第二个参数:显示给哪个玩家看的玩家ID。
第三个参数:设置菜单的显示风格,设置成MENU_TIME_FOREVER即可,表示不做操作就一直显示。
4. 菜单对象回调函数

函数声明方法照图抄写即可,不做解释。
第一个参数:菜单对象。
第二个参数:菜单状态。
第三个参数:操作了菜单的玩家ID。
第四个参数:玩家选择菜单项的下标。

这段照抄即可,表示玩家选中无关选项后自动关闭菜单。(例如,菜单项只有1和2,玩家选择3、4、5、6...)

这段表示如果玩家选择菜单项有效后的处理。
通过switch(item)对玩家菜单选项进行对应处理。
当为0时表示玩家选择第1项(菜单选项从1开始,菜单选项下标从0开始),重新调用Command_MainMenu函数用于,当玩家选择菜单项后菜单会自动关闭,重新调用创建菜单会重新显示一个新的菜单,从游戏方面来看,即是保持菜单不消失的效果,实际上是菜单刷新的太快视觉上看不出来。
当为1时调用PrintToChatAll函数弹出提示。
5. 总结
整个菜单创建的流程如下:
(1)创建菜单对象
(2)初始化设置菜单对象
(3)显示菜单
(4)菜单选项处理
6. 插件测试

可以看到菜单项1的内容,会根据玩家的名字显示不同的内容。当选择1时,菜单会有一声选中的音效但是并未消失,选择2时聊天框弹出提示。
以上为本次课程的全部内容了。转载请注明出处,作者:凌鹿。