RPGMAKER游戏引擎基于JavaScript的插件制作(三)——重写方法预备知识教学

”重写方法“重写指的是对系统原函数的重写,重写方法的目的在于改变系统原函数的作用或者快速制作出与原函数功能类似的函数


3.1 什么是方法

其实这个应该属于语法上的知识,由于非常重要,所以我结合RPGMAKER来讲基于对象的方法及与其有关的属性,参数,加深大家的理解。

参数如果有JavaScript语言基础,就会知道,获得对象一般是先写出一个构造函数,然后使用new<对象名><(实参表)>来建立。

Person = function(name,number) {
    this._name =name;
    this._number=number;
    this._country="中国";
    this._age;
};
var sunWuKong=new Person("孙悟空","1");

我随便设计一个构造函数,简单解释一下:
Person既可以是一个普通函数,也可以是一个构造函数,这取决你如何使用它,如果你要使用它建立一个对象,它就是构造函数(有个不成文的规则,如果是构造函数,首字母大写,如果是普通函数,按照通用的驼峰命名法命名)。
当你使用new创建对象时,传入的实参name和number就是这个对象的参数

还是利用上面的例子,Peron类需要使用参数创建对象,之后获得的对象一定会有属性,这些属性包括使用实参初始化的,比如name和number,也包括默认值如country,还包括定义但是未赋值的变量age。它们一起构成了这个对象的属性

有些对象,是能做一些事情的,这些就称作对象的方法,方法,我们一般在构造函数外定义。

Person.skill=function(){
alert("我是"+name);
} 
sunWuKong.skill();   // //输出“我是孙悟空” 

显而易见,方法就是这个对象所带有的函数。

3.2 RPGMAKER内部对象如何管理方法?

首先再复习一遍原型链的知识,对我们来说,知道原型链就是一种对父类方法和属性的继承,迭代的过程,对象通过原型链向上可以使用父类的属性和方法,向下可以创建自己的子类就够了。(想了解更多请查阅相关文章)

可以说RM中对象及其方法的构建是极其有逻辑的,我们还是拿管家类(Manager)来作为例子

很显然,你家的管家不是天生就有的,管家刚出生时,还和所有人一样,是个什么都不会的孩子,不过他有父母。
他的父亲(Manager对象)会教会他一些最基本,生存所需的知识,这些知识就通过原型链传递给了管家,于是管家从父亲那里继承了:1.都是人(都是同一种对象)2.都会做一些所有对象都会做的事(这些事就来自祖宗对象"Object“,其资料可以在W3School上查到);

这个孩子长大了,想要另立门户,于是他通过学习知识,掌握了一些关于管理物品的方法,所以他决定给自己起一个新名字,叫做**“物品管家”**)

function ObjectManager() {
    this.initialize.apply(this, arguments);
}

ObjectManager.prototype = Object.create(Manager.prototype);
ObjectManager.prototype.constructor = ObjectManager;

ObjectManager.prototype.initialize = function() {
    Manager.prototype.initialize.call(this);     //物品管家继承了他父亲的原型链
    this.skill ();   //物品管家自己学会的新技能
};

ObjectManager.skill()=function(){
alert("我是物品管家");
}

在这之后物品管家就是一个新的对象了,他可以通过原型链找到他父亲的方法,同时也有自己的方法skill。

好了,肯定有小朋友要问,为什么搞这么复杂呢,用一个管家解决所有问题不是就不用继承那么多次了吗?
其实,我们不断继承细分,就是为了方法好找,制作一个游戏所需要的方法之多,不能一步就找到,就好像你不能从一张中国地图找到一个人一样,你一定得先找到哪个省,哪个市,哪条路,哪个门牌,最终找到人,代码中对象不断继承,也是为了方便找到自己需要的方法,同时避免平行方法太多导致代码难以调试。

补充:精灵对象的原型链

通过学习这条原型链,大家可以对原型继承有更加深入的理解,对为什么要通过原型链细分方法有更深的认识。

祖先:永远是Object
第二代:Spirte 精灵
第三代:Sprite_Base 基础精灵
第四代:Sprite_Button 按钮精灵 , Sprite_Character角色精灵,Sprite_Battler 战斗精灵,Sprite_Actor角色精灵,Sprite_Enemy敌人精灵,插件中由其它继承而来的自定义精灵…
第五代:精灵实例

链接

第一节:前期准备以及RPGMAKER内建逻辑
第二节:如何理解插件,以及编写代码时的注意事项
第四节:重写方法(一):命名空间
第五节:重写方法(二):call函数,apply函数,覆盖式重写与复制式重写

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【实例教程1】怎样编写一个插件? 1. 插件的注释与定义参数 2. 读取插件参数 3. 插件指令的实现 【实例教程2】制作一个启动画面 1. 从哪里开始? 2. 创建启动画面的场景类 【实例教程3】玩转菜单初级篇 1. 给各个菜单界面添加背景 2. 让背景滚动起来 3. 在主菜单界面增加自定义菜单:改名 4. 在主菜单界面移除菜单命令 5. 在主菜单界面增加一个自定义窗口 【实例教程4】玩转标题画面 1. 美化游戏标题 2. 让背景动起来 3. 自定义标题菜单 4. 美化菜单 【实例教程5】制作游戏:坦克大战(上) 1. 游戏结构及流程介绍 2. 相关素材资源的下载和使用 3. 基础知识:音效的播放 4. 基础知识:精灵表的切帧 5. 基础知识:使用MV中的动画 6. Scene_TankWarTitle类解析 7. Sprite_Bullet类解析 8. Sprite_Explode类解析 9. Sprite_Tank类解析 10. Sprite_Enemy类解析 11. Scene_TankWar类解析 12. Scene_TankWarGameOver类解析 【实例教程6】存档的加密解密与保护 1. 找出MV存档和读档的方式 2. 制作MV存档的修改器 3. 如何保护存档? 4. 制作一个存档保护插件 【实例教程7】制作一个传送插件 1. 传送插件的主要功能 2. 将自定义数据保存到存档中 3. meta数据的使用 4. 使用地图备注登记传送点 5. 在插件中解析并记录传送点 6. 使用地图备注登记多个传送点并在插件中记录 7. 制作传送点选取窗口显示传送点数据 8. 将物品或技能标记为传送物品、传送技能 9. 显示传送动画实现传送功能 10. 禁止使用传送道具或传送技能 11. 实现插件命令
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值