美文网首页
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