目录

  • 窗口文字显示
  • 字体的颜色
    • 通常色
    • 系统色
    • 危机色
    • 死亡色
    • 计量器背景色
    • 血量计量器色1
    • 血量计量器色2
    • 魔法计量器色1
    • 魔法计量器色2
    • 魔法消耗色
    • 力量上升色
    • 力量下降色
    • 技能值计量器色1
    • 技能值计量器色2
    • 技能值消耗色
  • 颜色对象到底是什么
    • 颜色值列表
      • line 1
        • 0
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      • line 2
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
      • line 3
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
      • line 4
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
        • 31
  • 字体大小

窗口文字显示

RPG maker mv提供了若干种可以显示文字的组件,其中比较常见的就是窗口组件。那么我们来看看,如何在窗口上显示文字。

下面看一个例子:

//-----------------------------------------------------------------------------
// Window_Upgrade_Describe
//
// 升级项说明信息显示窗口(空)类
// 鼠标移动到升级项上时显示
function Window_Upgrade_Describe() {this.initialize.apply(this, arguments);
}
Window_Upgrade_Describe.prototype = Object.create(Window_Base.prototype);
Window_Upgrade_Describe.prototype.constructor = Window_Upgrade_Describe; Window_Upgrade_Describe.prototype.initialize = function(x, y) {var width = this.windowWidth();var height = this.windowHeight();Window_Base.prototype.initialize.call(this, x, y, width, height);this.contents.fontSize = 24;this.changeTextColor(this.normalColor());this.drawText("可以铸造", 0, 0, 200, 'left');this.changeTextColor(this.tpGaugeColor2());        this.drawText("优良", this.textWidth("可以铸造"), 0, 200, 'left');        this.changeTextColor(this.normalColor());        this.drawText("级装备", this.textWidth("可以铸造优良"), 0, 200, 'left');
};
Window_Upgrade_Describe.prototype.windowWidth = function() {return BUILDING_UPGRADE_DESCRIBE_WINDOW_WIDTH;
};
Window_Upgrade_Describe.prototype.windowHeight = function() {return BUILDING_UPGRADE_DESCRIBE_WINDOW_HEIGHT;
};

RPG maker mv提供了一个窗口基类对象(Window_Base),这个窗口基类对象提供了一整套文字显示相关的接口。我们先来看上面这个例子,我们自定义了一个窗口基类对象的子类对象(Window_Upgrade_Describe),在子类对象的initialize方法中准备窗口显示的文字。当我们在需要地方new这个子类对象时,就会调用到子类对象的initialize方法,在initialize方法方法中构建要在窗口上显示的文字。

现在我们看看具体是调用了哪些接口来显示文字的。

this.contents.fontSize = 24;

首先我们注意到了contents成员,这个成员其实是Window_Base的成员,通过继承得到的。在Window_Base中contents是一个bitmap对象(也是RPG maker mv提供的一个组件),窗口上的文字其实是描绘在contents成员上的,我们可以通过contents.fontSize设置窗口文字的字体大小。

this.changeTextColor(this.normalColor());

接下来我们看到了changeTextColor()方法,它也是继承自Window_Base对象,用来设置字体的颜色。参数是normalColor()方法的对象,通过名字可以了解是窗口通常色,还有若干类似的方法,分别返回RPG maker mv框架内部使用到的颜色,具体我们稍后再说。

this.drawText("可以铸造", 0, 0, 200, 'left');

最后我们看到最重要的一个方法了,drawText也是继承自Window_Base对象,用来显示文字。drawText()方法有五个参数,分别是:

  1. 要显示的文字(字符串)
  2. 显示的开始位置的x值
  3. 显示的开始位置的y值
  4. 字符串的宽度
  5. 文字对齐方式(靠左、居中还是靠右)
this.textWidth("可以铸造")

我们再来看一个有意思的辅助方法,textWidth也是继承自Window_Base对象,它可以计算并返回字符串的宽度,注意上面这个“可以铸造”返回的可不是4哦,是在屏幕上对应的像素点宽度。

结合前面的代码,我们可以看到显示文字的一般步骤:

  1. 设置字体大小
  2. 设置字体颜色
  3. 显示文字

字体的颜色

Window_Base对象提供了若干方法来获取框架内使用到的颜色对象:

通常色

Window_Base.prototype.normalColor = function() {return this.textColor(0);
};

系统色

Window_Base.prototype.systemColor = function() {return this.textColor(16);
};

危机色

Window_Base.prototype.crisisColor = function() {return this.textColor(17);
};

死亡色

Window_Base.prototype.deathColor = function() {return this.textColor(18);
};

计量器背景色

Window_Base.prototype.gaugeBackColor = function() {return this.textColor(19);
};

血量计量器色1

Window_Base.prototype.hpGaugeColor1 = function() {return this.textColor(20);
};

血量计量器色2

Window_Base.prototype.hpGaugeColor2 = function() {return this.textColor(21);
};

魔法计量器色1

Window_Base.prototype.mpGaugeColor1 = function() {return this.textColor(22);
};

魔法计量器色2

Window_Base.prototype.mpGaugeColor2 = function() {return this.textColor(23);
};

魔法消耗色

Window_Base.prototype.mpCostColor = function() {return this.textColor(23);
};

力量上升色

Window_Base.prototype.powerUpColor = function() {return this.textColor(24);
};

力量下降色

Window_Base.prototype.powerDownColor = function() {return this.textColor(25);
};

技能值计量器色1

Window_Base.prototype.tpGaugeColor1 = function() {return this.textColor(28);
};

技能值计量器色2

Window_Base.prototype.tpGaugeColor2 = function() {return this.textColor(29);
};

技能值消耗色

Window_Base.prototype.tpCostColor = function() {return this.textColor(29);
};

颜色对象到底是什么

通过上面的接口实现可以看到,所有的颜色对象都是通过textColor()接口返回的。那么textColor()接口究竟做了什么呢?

Window_Base.prototype.textColor = function(n) {var px = 96 + (n % 8) * 12 + 6;var py = 144 + Math.floor(n / 8) * 12 + 6;return this.windowskin.getPixel(px, py);
};

函数中的Math.floor()是一个向下取整的动作,可以看到整个函数根据输入的n计算出一个(px,py)值,再根据(px,py)取得Pixel。这里的Pixel是通过windowskin成员的getPixel()方法取得,那么windowskin是什么呢?

Window_Base.prototype.loadWindowskin = function() {this.windowskin = ImageManager.loadSystem('Window');
};

啊,原来windowskin 是一个Image对象,而这个Image对象是根据“Window.png”图片创建的。这里可能有的同学对ImageManager比较陌生,它是全局静态对象,负责读取、管理框架使用到的所有图片。上面就是通过ImageManager对象的loadSystem()方法创建了一个Image对象,或者更准确的说是一个Bitmap对象。

再来看看看getPixel ()方法的说明:

/**
* Returns pixel color at the specified point.
*
* @method getPixel
* @param {Number} x The x coordinate of the pixel in the bitmap
* @param {Number} y The y coordinate of the pixel in the bitmap
* @return {String} The pixel color (hex format)
*/

pixel color,一种采用十六进制形式表示颜色的字符串。
好的,现在我们来看看Window.png是一张怎样的图片:

Window.png是一张192*192大小的bitmap,bitmap右下方的部分就是rpg maker mv系统框架的窗口所使用到的颜色。我们可以根据textColor()方法的算法来确定每种色块的整数值,即textColor()的入参与色块的对应关系。

颜色值列表

line 1

0


白色的,由于背景也是白色的,所以看不到~

1

2

3

4

5

6

7

line 2

8

9

10

11

12

13

14

15

line 3

16

17

18

19

20

21

22

23

line 4

24

25

26

27

28

29

30

31

字体大小

Window_Base对象提供了一个获取窗口默认字体大小的接口:

Window_Base.prototype.standardFontSize = function() {return 28;
};

通过前面的例子,我们知道可以通过设置contents对象的fontSize来改变字体大小。至于每种大小的数值,这里无法进行真实大小的对比,就不在这里展示了,大家实际用到时可以试一试。

RPG Maker mv框架代码解析之窗口文字显示相关推荐

  1. RPG Maker mv框架代码解析之窗口图片显示

    文章目录 1 窗口基类的图片描画接口 1.1 Face描画接口 1.2 Icon描画接口 2 描画自定义图片 1 窗口基类的图片描画接口 RPG Maker mv框架中的窗口基类(Window_Bas ...

  2. RPG Maker mv框架代码解析之Sprite_Button

    1 Sprite_Button rpg maker mv框架中的按钮组件,一般作为窗口组件的成员使用. 2 原型 Sprite 3 方法 3.1 update callback,Sprite_Butt ...

  3. RPG Maker MV插件系统详解与如何编写插件

    最新发布rmmv和以往的版本最大不同就是脚本系统了,整个脚本系统采用html5的javascript编写.和以往的ruby脚本简直天翻地覆 这也是为了实现跨平台运行,也是前所未有的高度编程自由,所有游 ...

  4. RPG Maker MV 踩坑一 新仙剑菜单

    RMMV中菜单UI修改出现的错误 RMMV--灵儿续传 鬼畜主菜单 多菜单选中问题 其他问题 学习的教程 最终结果 接下来的要踩的坑 RMMV--灵儿续传 本人计划进入游戏行业的萌新,以前玩过新仙剑- ...

  5. 修改rpg maker mv的几种上限2020-05-25

    关于rpg maker mv五种不会编程也能学会的突破上限的方法 声明,出现意外概不负责,如有简便方法欢迎评论. 以下方法建议用记事本打开,设置好后建议重新打开项目工程 修改变量上限 Map编号是自己 ...

  6. RPG Maker MV游戏解包

    该文章最新版本请前往:https://www.crowsong.xyz/127.html 前言 使用Petschko's RPG-Maker-MV File-Decrypter进行解包 使用Petsc ...

  7. 【RPG Maker MV】RPG游戏《机器人养成记》制作笔记 - 制作背景和引擎选择

    想让更多的人了解人工智能,学会机器学习,但机器学习本身有太高的入门门槛,导致很多人望而却步.因此一直在想办法让机器学习变得简单.有趣一些.做过一些尝试:比如用动画的形式介绍机器学习原理(点击查看),通 ...

  8. 写一个rpg maker mv 脚本,功能是让玩家在游戏开始时候可以自己捏脸

    很抱歉,我并不会编写代码,但是我可以提供一些指导. 在RPG Maker MV中,你可以使用脚本编写一个"脸部编辑器"功能,允许玩家在游戏开始时进行自定义.你可以使用一些图像处理库 ...

  9. 记一次完整的RPG Maker MV游戏逆向系列第四篇

    前言 阅读本篇前请先看之前的几篇分析噢,不然可能会缺失一些前置知识 这篇还是讲 RPG Maker MV 的游戏分析,主要是如何分析一种通过 GameusQuestSystems.js 的加密手段 工 ...

最新文章

  1. 干货|一文全解深度学习中的卷积
  2. 我理解的配置管理系统
  3. Python之路,day22-BBS基础
  4. element-ui中用el-dialog+el-table+el-pagination实现文件默认选中且在分页的条件下有记忆功能...
  5. 测试Spring的“会话”范围
  6. 847. Shortest Path Visiting All Nodes(一)
  7. python 显示图片matplotlib_Python OpenCV ——Matplotlib显示图片
  8. 《学习OpenCV》课后习题解答(第三章)(仅供参考)
  9. TCP流式套接字的异步事件WSAAsyncSelect编程
  10. python回到首行_python读取文件首行和最后一行
  11. jsp开发教程之 仿MOP论坛 二(数据库,界面设计篇)
  12. 如何在matlab中读写segy格式数据
  13. 短信验证码后端-接口设计
  14. 川藏自驾游的神州租车攻略
  15. 面试以前上司,能力一般,不想给他通过,但他卑微哀求,怎么办?
  16. 小老弟!听说你在搞Android 10.0 适配,看这篇就妥了!
  17. 那些好用的无版权免费图片网站
  18. c++删除U盘文件病毒
  19. 独家 | 火灾之后,我们能够利用大数据做些什么?
  20. 西部数据硬盘 跳线 (收藏)

热门文章

  1. Css+Jquery实现点击图片放大缩小预览 图片预览 查看大图
  2. 徐小贱c语言试卷,纹了这条锦鲤,我遇见了现在的老公 | 纹身大赏No.12
  3. 苹果最新框架教程之 ProximityReader是什么
  4. file_operations结构体介绍
  5. c 语言函数公有私有区分,C++私有成员函数
  6. PUE 1.2,总投资达36.4亿,17600个机柜!天和防务拟建陕西最大数据中心
  7. Umi3.5配置全局路由及菜单
  8. 软件实施工程师需要掌握的技能
  9. 台式机安装双系统win10+Ubuntu
  10. 【Windows安装WSL】WSL中安装Ubuntu发行版,提示占位程序接收到错误数据