点击这里返回rpg_windows.js
点这里返回总目录
题记
- 作者:RPGAMKER MV 官方源码
- 所在文件:rpg_windows.js
- 简介:实现转义文字的大入口。
概况
之所以说是大入口,是因为这个函数源码并没有进行详细的计算和赋值。它所做的是判断情况,顺序调用真正实现转义过程的其他函数。(例如convertEscapeCharacters等)。
一些啰嗦的笔记
Window_Base.prototype.drawTextEx这个函数体内的代码并不长,单纯来看也不复杂,因为它只是一个入口。我不知道用入口来形容是否准确,它可以看做一个大袋子,里面还装着小袋子。就像你去勾搭画手写手的时候,你准备好了一个大套路,然后里面套着各种小套路。(太太们,我没套路,我只有真心...)
if 判断
最先执行的是if判断。
if在C和C++里也有,在很多语言里都出现过。
单独列出来,放在JS-MV小故事里了。
此处,它判断的是否含有文字。如果有文字,执行各种操作,如果没有文字,那么就直接返回0,在返回0之前,它什么都不做。
我们详细看的是含有文字的情况。
textState被初步声明
大致过程,声明文本状态对象textState。(关于对象,请看JS-MV小故事。)
这个对象在第一次声明时,定义了几个元素
- index(索引,初始值为0)
- x (x轴位置,初始值是参数x)
- y (y轴位置,初始值是参数y)
- left(名字叫做左,实际上是判断是不是行头用的,初始值是参数x)
convertEscapeCharacters(text)
接下来,调用同一个对象下,它的兄弟函数convertEscapeCharacters(text)。
这个兄弟函数是初步处理,就是编码的转换,使得JavaScript能够处理作者在数据库或地图事件中的输入(实际上无论在哪里,都会存储在json文件里),其实解读的是json中的编码,解读之后JS语言理解了。
里面还在调用其他函数,就是套路中的套路中的套路....
值得一提的是,在调用之后,会赋值,赋值给一个刚才声明状态时未声明的元素。
这个元素同样是textState对象中的一员。(就当做新生儿出生了吧)
这个元素,被取名为textState.text。
从名字看出,它就是文字本体了,但还未行程真正的转义处理,只是被转码了。
calcTextHeight(textState, false)
在text完成后,继续调用函数,这一次是calcTextHeight(textState, false);
如果去找,会发现calcTextHeight并不是MV定义的。这个函数实际上是JavaScript自身定义的函数,只要是text对象的实例,都可以使用这个函数。
虽然可能原理复杂,但用起来不难,只是似乎百度上很少有人用。这个函数的官方解释是:Calculate text box height。计算文字框的高度。
它的原理:
calcTextHeight: function() {
var lineHeight, height = 0;
for (var i = 0, len = this._textLines.length; i < len; i++) {
lineHeight = this.getHeightOfLine(i);
height += (i === len - 1 ? lineHeight / this.lineHeight : lineHeight);
}
return height;
},
总之,它最后返回的是高度。
有了这个值,又一个新生儿被填入灵魂。这个新生儿同样是textState对象中的一员,名叫textState.height。
重设字体设置
调用函数,重设字体的设置。
好像没啥特别的?
循环执行processCharacter(textState)
关于循环,while相当常见,其他编程语言里也有while循环。(关于while,可以看jS-MV小故事。)
当index小于文本长度时,循环操作执行一个函数processCharacter。而这个函数的参数,是textState整个对象。
processCharacter这个函数,用于处理转义字符,也同样是个入口。
所有的字符都被转义之后,会返回新的x元素,此x元素在操作上,应该是被重置了,再度回到最左边去了。
遇到return时,整个函数就会结束。
其他
等想到了再补充。
网友评论