因为要开新坑了,准备连续更新把这个插件制作的坑填完,之后更新的是“可交互精灵——事件绑定教学”,“窗口(windows)教学","自动战斗AI实现——学会自我挖掘引擎功能”。
本文通过在地图场景创建精灵对象的实例,让读者学习复制式重写的基本使用方法,能够通过位图文件和位图对象创建精灵
同时会帮助大家辨析几个比较容易混淆的概念:场景scenes,窗口windows,精灵sprites
6.1辨析场景(scenes),窗口(windows),精灵(sprites)
打开文件夹发现这三种对象都各自有一个JS文件来创立,这几个概念大家是容易搞混的,这里我直接帮助大家区分:
scenes:游戏运行时最底层栈所显示的对象,就像一块一样画板,是各种精灵(颜料),窗口(画布)对象的活动场所,切换场景时,应该是把原先的场景清除出栈,再载入新的场景。
常见的有“基础场景(Scene_Base)“,“开始界面场景(Scene_Title)”,”地图场景(Scene_Map,主角在大地图上活动的场景)“,”战斗场景(Scene_Battle,进入战斗后的场景)“
windows:基于场景,跳出后覆盖场景,只能对于位于栈顶的窗口进行操作,退栈之后退回到上一个窗口或者场景,就像在一块画板上铺一层画布。
常见的有读取存档窗口,角色属性窗口,背包窗口。
sprites:看到精灵,大家都会想到是个轻盈,可以到处飞的小家伙,精灵就是可以存在于各种场景,窗口上面,又不影响其运作的东西,而且精灵的功能非常多,可以作为图标,按键,角色等等,是我们最常用的对象。
接下来我将复制一个精灵,并将其安放在地图场景中,来教大家复制式重写,以及精灵,场景对象的运用。
6.2 代码逐段解析
下图是这次的目标,在大地图场景中的左上角放一个闹钟图片精灵和一个文字精灵,Let’s go!
我将逐段解析,大家最好打开项目跟着我的指导做,自己键入代码,写上注释。
6.2.1 前期工作——设置命名空间,插件参数
为了让大家养成良好习惯,还是要写一下命名空间,对于较小的插件,创建的命名空间就和插件名称一样即可:
//==================================================
//spriteTest
//===================================================
/*:
*@plugindesc 精灵,位图,场景实验插件
*@author 进入盛夏之门
*
*@param text
*@desc 这是显示的字符段
*@default 我是一个闹钟
*
*/
//建立命名空间,用于储存这个插件用到的插件变量和函数
var $spriteTest = $spriteTest || {
};
//将这个插件中的变量放入这个命名空间中
$spriteTest.Parameters = PluginManager.parameters('spriteTest');
//设置构造函数存储参数插件参数(即上面的text参数)
$spriteTest.Param = $spriteTest.Param || {
}
按套路写好插件头,创立命名空间,我这里命名空间只是用来储存text这个插件变量,这样子方便在引擎界面修改,严格来说,插件中自建的函数一般都要放在命名空间的原型链上,不然会出现大量全局函数,我这里出现了一些奇怪的BUG有些函数没放在原型链上,但是我编的其它插件没问题。
6.2.2 复制系统的精灵类,构建专属精灵类
//我们对系统提供的精灵类进行复制,创建一个"mySprites"
function mySprites() {
this.initialize.apply(this, arguments);
}
mySprites.prototype = Object.create