Window_Base.prototype.drawTextEx笔记

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

其他

等想到了再补充。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,895评论 0 3
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,552评论 0 21
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,905评论 1 45
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 4,998评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,709评论 1 32

友情链接更多精彩内容