以SCM插件为基座开发的简易经营游戏思路 - 状态篇
系列目录
准备
本篇默认你已经看过了上一篇教程,所以除了必要的情况之外,不会再对讲过的内容重复讲解
延续上一篇的案例,这一篇会搭建一个可以随时切换角色,且可以翻页的新的状态界面
因为接下来可能要涉及到一点点必要的js知识,所以这里给一本教材
通过网盘分享的文件:(分享用)MZ脚本调用大全.xlsx
链接: https://pan.baidu.com/s/1GZcenJU26CrYnvEGrMwttA?pwd=fj7n 提取码: fj7n
–来自百度网盘超级会员v3的分享
这是rmmz核心代码提供的调用脚本文档,感谢制作了中文文档的大佬
另外,这一篇还不会教显示备注栏图片的方法,因为美术素材还没准备好。不过自己摸索应该也能会了
窗口布局
双击选择一个新的空白场景,这次不用再在之前那个场景里塞窗口了,本文命名为Scene_statusNew
有了新场景的标识符,就可以在主菜单的确定事件补上选择人员的分歧了:
1 | ◆如果:主菜单-index = 2 |
这样选择对应选项,就会跳到对应的场景中
然后设计窗口布局,看过了上一篇,布局应该就不算特别难办了,只贴一下数值,就不详细展开讲了。
- 角色列表actorSelect:宽96
- 角色参数窗口statusParam:相对X坐标窗口actorSelect,高560
窗口内容
角色列表
只要获取当前队内的角色
1 | $gameParty.members(); // 队伍成员 |
并画一个角色行走图就行
1 | this.drawActorCharacter(item, r.x + 24, r.y + 96); // 角色图形 |
另外xy偏移需要自己按需调整,r.x应该不用动,r.y加上行走图的高度,我用的行走图是96x96一格
角色参数
首先在在列表窗口标识符输入角色列表的标识符,应该不用强调吧
这次需要在窗口中显示较长一串文本,除了对应角色的属性之外,还要显示一段给玩家看的属性说明,所以需要用上绘制脚本(多行)来输入

我去,这么多的……别急,等会有办法来精简
由于这个游戏是模拟经营游戏,所以用不上自带的那些攻击力啊,防御力啊这些属性,所以我们只能把这些数值存到变量里面,除了属性之外,还需要好感度,以及一个专门用于存放设定的工作安排的变量,总之大概要像这样创建一些变量
1 | v151:角色A的身手 |
这样以此类推,没招了,一个个建吧
建议用记事本或者便签之类的稍微记一下,因为后续还会用到
然后,在角色备注栏中输入元数据:
1 | <param:\c[6]身手\c[0]:\v[151] |
像这样输入到角色A的备注栏当中,然后复制到角色B的备注栏,把标识符里的变量编号改改
然后写上参数窗口的项目绘制脚本:
1 | this.drawTextEx(`${item.meta.param}`, r.x + 324, r.y + 16, r.width); // 任意文本绘制(含控制字符转换) |
这样测试游戏,就能看到属性列表了!……吧?
不是,它怎么报错了!
这是因为,这个脚本中提供的item变量,它读取角色的数据时,它读取的并不是数据库里的角色数据,而是游戏中当前状态下的角色数据。也就是说,它读取的其实是$gameParty.members[n],而不是使用了元数据的$dataActor。打开开头给你们的教材,在game data表中找到$gameParty.members[n]的部分,看第三列的属性部分,是不包含note和meta的。
不过,它有一个叫做actor()的属性,可以通过它来获取对应角色在数据库中的数据。我们把项目绘制脚本改成这样
1 | this.drawTextEx(`${item.actor().meta.param}`, r.x + 324, r.y + 16, r.width); // 任意文本绘制(含控制字符转换) |
就可以正常显示元数据param中的一串文本了
接下来补全剩下的属性信息,它基本上是不会在游戏中改变的,并且drawTextEx支持手动换行,放心大胆地换吧
1 | this.drawTextEx(`${item.actor().meta.param}`, r.x + 324, r.y + 16, r.width); // 任意文本绘制(含控制字符转换) |
其实这段参数说明文案我还没想好怎么写,只是觉得这里太空了所以要写点东西
精简长段文本
我们后续还要在角色的备注栏中输入更多的文本,例如角色简介、角色优势之类的,但在备注栏输入的文本越来越多,备注栏就越来越长,所以我们肯定是希望备注栏中的文本能够更精简清晰一些
我们可以用到一个官方插件:TextScriptBase,和PluginCommonBase应该是在一个文件夹里。
而这个插件中,我们要用到的功能也很简单,就是将一段很长的文本,浓缩在一个控制符里,插入了这个控制符,就会调用这一段文本。
在文本数据列表中双击空位,像这样输入:
识别符:paraminfo
文本:
\c[5]参数说明\c[0]
\c[6]身手\c[0]:
\c[6]技巧\c[0]:
\c[6]交际\c[0]:
\c[6]洞察\c[0]:
由于从原来的js代码变为了文本,所以不需要用双斜杠转义了,改成单个斜杠符号就行。
没有自动换行功能,需要自己来手动换行。
这样,只要我们插入\tx[paraminfo],就能显示出这么一长串文本。回去把项目绘制脚本改成:
1 | this.drawTextEx(`${item.actor().meta.param}`, r.x + 324, r.y + 16, r.width); // 角色属性 |
这样的显示效果,和改之前是没区别的,且代码更为精简了。
接下来要显示大段文本的情况,也将会这样处理。不过……
状态窗口的翻页
不是说好的,按下确定键就会翻页吗,这只写了一个参数显示窗口,我角色介绍窗口呢?
好吧,由于我不知道如何直接刷新窗口的显示内容,所以我们要用特别笨的办法,那就是再建一个显示角色介绍的窗口,通过确定键来交替显示,实现翻页的效果。
可以把角色参数窗口直接复制一个,标识符改成statusBio就行,先把项目绘制内容删掉,以便测试的时候查看翻页的效果。
接下来,给statusBio和statusParam各设定一个显示开关

statusBio就是108号的这个,statusParam就是107号
然后新建一个叫【状态-翻页】的公共事件
1 | ◆如果:状态-显示参数 为 开启 |
嗯,应该比较好理解,就不解释了
然后在角色选择窗口中(因为我们在状态场景中,从始至终都是保持激活角色选择窗口),设置确定事件,绑上刚才新建的公共事件

窗口标识符填上角色选择窗口自己的,防止它飞到别的窗口中
这样,当我们在状态界面按下确定键,就会交替显示两个窗口了
介绍窗口的内容
按照角色参数内教的内容,应该自己也会弄了,这里也不展开讲了。
项目绘制脚本
1 | this.drawTextEx(`${item.actor().meta.bio}`, r.x + 324, r.y + 16, r.width); // 角色介绍 |
其实这两个内容全都放在一个元数据里也可以,这里是方便排版美观
分别设置角色备注栏

剩下的在TextScriptBase里设置的内容就不放了。这样应该就能显示角色的简介和优劣势了。
后记
现在状态界面也已经搭建完成,接下来就是比较重量级的经营系统了。


