美文网首页
Window_Base.prototype.drawTextEx

Window_Base.prototype.drawTextEx

作者: 燃鲤Kuma_苦猫甜鱼 | 来源:发表于2019-04-12 22:36 被阅读0次

点击这里返回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时,整个函数就会结束。

其他

等想到了再补充。

相关文章

网友评论

      本文标题:Window_Base.prototype.drawTextEx

      本文链接:https://www.haomeiwen.com/subject/szqkwqtx.html