赞 | 34 |
VIP | 2 |
好人卡 | 3 |
积分 | 309 |
经验 | 36064 |
最后登录 | 2024-11-16 |
在线时间 | 608 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 30940
- 在线时间
- 608 小时
- 注册时间
- 2014-7-18
- 帖子
- 729
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 xjzsq 于 2018-2-6 22:50 编辑
教程一传送门:[教程]RMMV脚本教程(一)
https://rpg.blue/forum.php?mod=viewthread&tid=394509
(出处: 66RPG)
自从上篇教程发布,到现在已经将近1年了吧,在这一年中,由于繁重的学业以及我的懒惰,一直都没有更新...
这次期中考试前夕,我在逛论坛的时候发现有人关注我的教程,并要求我写第二篇,再加上这次期中考试成绩不是很理想,所以下定决心开始写这篇教程。另外@一下支持我、催更的朋友们:@,@zhouhan,@lucy94920,@claudeoy(照抄教程1)
1.本教程提供给一些已经有一点脚本基础的学习者们(至少你要知道变量啊函数啊什么的),如果你没有达到,那我希望你打开着RMMV的F1文档来看这篇教程(F1链接:http://miaowm5.github.io/RMMV-F1/)和机翻RMMV的原生脚本(https://rpg.blue/thread-385523-1-1.html,最近突然发现汪汪大佬在很久以前就把翻译脚本放到了github上,这里放上链接:https://github.com/wangwangxingao/RMMV/tree/master/%E6%B3%A8%E9%87%8A;
2.由于本人第一次写教程,因此排版上会有点(非常)乱,请多多包涵;
3.本教程可能会有一些小(或者致命的)错误,请大家积极反馈,让脚本得到完善,另外在教程内我也会有没有调试出来的地方,就请读者们说一说解决方法啦(众:写不出来还做什么教程!);
4.本教程会将RMVA(RGSS3)的语法和RMMV(JS)语法进行比较,让大家学习得更容易一些;
5.本人可能一次写不完一节的教程,会分到好几次编辑,因此会导致写到一半而发了出来的情况,请大家谅解。
6.鉴于本人的学业繁重,三周放一次假,每次放24.5个小时,再加上本人比较懒,因此更新速度会比fei较chang慢,请谅解。
7.本人追随最新潮流,把IDE换成了VS2017。
1.(略)
(我精心布置的作业竟然没人做,实在是太令人伤心了...)
2.①新方法名 = 旧方法名
②
- function Window_MapStatus() {
- this.initialize.apply(this,arguments)
- }
- Window_MapStatus.prototype = Object.create(Window_Base.prototype);
- Window_MapStatus.prototype.constructor = Window_MapStatus;
- Window_MapStatus.prototype.initialize = function (x, y, width, height) {
- Window_Base.prototype.initialize.call(this, x, y, width, height);
- this.refresh();
- }
复制代码 ③A解析略(谁叫你们不回答的...)
上回说到,我们在地图画面成功地创建了一个窗口,但我们的窗口里面还什么都没有啊,因此我们现在我们的窗口里面显示一些文字。
话说上回我们提到了Window_MapName这个窗口,这个窗口里面就一定有显示文字的方法,因此我们打开这个文件。
在这个文件中,我们发现好像这个窗口和我们定义的不太一样,他比我们上节课讲的多了一个设置创造者,因此照抄不误。
另外,我们在refresh方法里面找到了drawText方法,看起来像是显示文字的方法:
但是我们的窗口没有refresh方法呢。我们一直是把方法定义到Scene_Map.prototype.createStatusWindow里面,这是我1年前的想法,但是这样做并不好,因此我们把脚本改成官方的写法:
找到引用refresh的地方:
原来是initialize,因此把我们的initialize改成这样:
- Window_MapStatus.prototype.initialize = function (x, y, width, height) {
- Window_Base.prototype.initialize.call(this, x, y, width, height);
- this.refresh();
- }
复制代码 (仅仅加了一条refresh)
然后在创造一个refresh方法:
- Window_MapStatus.prototype.refresh = function () {
- }
复制代码 既然是想显示文字,我们就要看下Window_MapName里面怎么定义的了:
划横线出应该就是了吧。
因此在我们的refresh方法里面也添加上这一句:
- this.drawText($gameParty.members()[0]._name, 0, 0, this.Width);
复制代码 这里drawText方法的介绍如下:
drawText ( text , x , y , maxWidth , [lineHeight] , [align] )在位图上绘制描边文字。 参数:- text String
要绘制的文字 - x Number
文字左侧的 X 坐标 - y Number
文字顶部的 Y 坐标 - maxWidth Number
文字允许的最大宽度 - lineHeight Number
文字的行高(可省略) - align String
文字的对齐方式(可省略)
(摘自帮助文档bitmap类,有改动)
在我们的脚本里面,$gameParty.members()[0]._name就是要绘制的文字,两个0是x,y坐标,然后this.Width是获取位图的宽度,文字的行高和对齐方式省略不写。
这个方法就相当于VA中的draw_text方法。
现在运行一下,看看效果:
成功了的说!!!
但是眼尖的同学已经发现默认脚本Window_Base里面已经有一个drawActorName方法了,看一下他的定义:
这里面包含了drawText方法,并且还增加了当角色HP较低时将名字变色的效果,因此比我们的脚本写得更加美观。
因此把我们的
- this.drawText($gameParty.members()[0]._name, 0, 0, this.Width);
复制代码 改成
- this.drawActorName($gameParty.members()[0], 0, 0);
复制代码 即可。
这里我们的参数也省略了不少,另外在其方法内部可以看到width默认是168,这个值在绘制LV时会用到。
写到这里,先发表出来,以防万一。
|
评分
-
查看全部评分
|