接下来就进入到编写插件最重要的部分了,那就是方法重写。
前面我已经讲过方法了,在RM中,方法储存在一个个功能各异但是同根同源的对象中,然后游戏就是通过对象实例化,调用对象方法,实现游戏的各个功能。(这里要为大家区分一下静态类与非静态类,静态类指全局唯一的对象,不能也不需要实例化,作用域为全局,比如角色,技能,地图这些共用的对象,都在RM中定义为了静态类)
4.1 为什么插件制作核心在于重写方法?
我将举个例子帮助大家理解:
现在你有一个用清一色形状相同红砖砌成的简陋房子(就是RM自带的简陋代码),你想要把它改装成一个造型独特的建筑。
你并不会烧砖,所以只能对这栋房子原来的红砖进行改造,夹带私货。这就涉及重写方法的几个问题:
1.不自己烧砖(你很难从头写出与官方代码完全兼容的代码);
2.只是对原有砖头改造(继承原型链);
3.不要把全部砖都搞成一个样子(设置自己的原型链,尽量不要覆盖全局代码)。
4.2 为什么不要覆盖全局代码
因为我们的插件可能只是在某些方面需要用到,而系统定义的对象往往是全局使用的,比如精灵对象,你想建立一个可以闪烁的精灵放在开场界面里面,但是并不是整个游戏都需要闪烁的精灵。
Sprite_Base.prototype.update = function() {
Sprite.prototype.update.call(this);
this.updateVisibility();
this.updateAnimationSprites();
this.flashing(); //你在系统源代码中插入的“私货”
};
假设你就直接在源代码sprite.js中的Sprite_Base的刷新函数(就是每隔一帧就会执行一次的方法)加入一个自己定义的“闪烁”函数,那么以后所有通过new Sprite获得的对象都会继承这个方法,由于整个游戏的精灵都是继承这个对象,那么就导致整个游戏的精灵都会闪烁,这可不是我们最初想要看到的结果。
当