构建窗口所依赖的场景
# 构建窗口所依赖的场景
# 基础概念
窗口是依赖于场景的。先构建场景,再让自定义的窗口附加在场景内。
# 具体步骤
# 创建文件并放在正确的文件夹内
创建名为VariableProgress.js
文件,放在plugins
文件夹下,文件目录为js\plugins\VariableProgress.js
。
# 创建VariableProgressScene类
创建名为VariableProgressScene
的类,即变量进度条场景类
。
class VariableProgressScene {
constructor() {}
}
2
3
# 场景类继承
场景,scene
,实际上均为mv
的Scene_Base
类的实例化对象。我们俗称为场景基类
。
新增加的场景类应该继承场景基类,这里不选择Scene_Base
类,而是Scene_MenuBase
类。因为此菜单场景基类可以提供更多的方法和属性。并且菜单场景基类的背景图默认为当前地图的截图,显示效果更好看一些。如果选择Scene_Base
类作为VariableProgressScene
类的父类,那么默认的场景背景是黑色的,容易受到误导,误以为自己添加场景失败。
class VariableProgressScene extends Scene_MenuBase {
constructor() {
super();
}
}
2
3
4
5
继承其他类时,我们的构造函数需要使用super()
函数 (opens new window)调用父类的构造函数。
# mv构造函数为initialize函数
值得注意的是,这仅仅只是语法上的实现构造函数,看起来好像是初始化了对象的全体属性,实际上并没有。mv
的constructor
构造函数并没有定义属性,真正定义属性的是mv
的initialize
函数。在mv
的架构中,initialize
函数总是具有实际意义的构造函数,能够定义并初始化属性的构造函数。
下面的代码才能算是实现了属性初始化:
class VariableProgressScene extends Scene_MenuBase {
constructor() {
super();
this.initialize();
}
initialize() {
super.initialize();
}
}
2
3
4
5
6
7
8
9
# 增加场景类所需的基本函数
需要至少增加create()
、start()
、和update()
方法,这三个方法是SceneManager
场景管理对象所要求必须实现的方法。点此深入了解学习相关的知识。
函数与方法
在面向对象语言中,总是称呼函数为方法。
代码如下:
class VariableProgressScene extends Scene_MenuBase {
constructor() {
super();
this.initialize();
}
initialize() {
super.initialize();
}
create() {
super.create();
}
start() {
super.start();
}
update() {
super.update();
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 让场景可以退出
现在的场景是无法退出并返回到上一个场景的,我们需要手动实现相关的退出逻辑。这里在update()
方法内增加逻辑。代码如下:
update() {
super.update();
// 如果在当前的场景内部的输入流为系统设定的cancel。
if (Input.isTriggered('cancel')) {
// 静态方法声音管理器输出关闭音效。
SoundManager.playCancel();
this.popScene();
}
}
2
3
4
5
6
7
8
9
Input.isTriggered('cancel')
是mv
用于监听退出按键的逻辑,点击逻辑按键cancel
后,退出当前界面并返回上一个界面。你可以去drill-plugin-page (opens new window),即钻头插件文档内,了解逻辑按键的概念。
这里为了语义化,称呼为界面。实际上的逻辑是场景与场景之间的切换。
this.popScene()
是场景类提供的退出当前场景并默认返回上一个场景的方法,点此了解深入的实现逻辑。
# 添加场景到游戏内,并进入游戏
如下图,在地图内新增一个可交互的事件,并执行以下代码:
# 完成场景构建
至此已经完成了基本的场景构建。第二版作者是希望大家在场景内自测代码。