RPGMaker MV的场景管理系统

看了一下RPGMakerMV的代码,做个笔记
rm中有个场景管理器SceneManager,这是一个静态类,就当做单例使用。
对应的是Scene_Base,这是所有场景的基类。标题场景,地图场景,战斗场景等都直接继承自Scene_Base。

SceneManager

主要字段
  • _scene 当前场景 保存的是实例
  • _nextScene 下一个场景 保存的是类
  • _previousClass 上一个场景 保存的是类
  • _stack=[] 场景堆 stack里存的是场景的类型,不是场景实例。当需要返回上一个场景时,根据类型新建场景。
  • _stopped=false 是否暂停
主要方法
  • update() 帧循环 原理是requestAnimationFrame()

updateMain() 在update里面,处理场景的更新

updateInputData() 这三个都在updateMain里面
changeScene()
updateScene()

  • goto(sceneClass) 切换场景。传入新场景的类,它自动new一个新的。当前场景的类保存在_previousClass里
  • push(sceneClass) 把原来的场景的类型放入stack,然后切换场景。
  • pop() 返回_stack顶不的场景,如果没有,退出游戏。

Scene_Base

主要字段
  • _active=false 是否激活
  • _fadeSign=0 1表示正在fadeIn -1表示正在fadeOut
  • _fadeDuration=0 淡入淡出时间
  • _fadeSprite=null
  • _imageReservationId=Utils.generateRuntimeId()
主要方法
  • isActive() 对应_active 是否激活
  • initialize() 初始化函数,new的时候调用。一般不用,或者用来声明一下变量。
  • create() 空函数 初始化函数,创建窗口内容,子类重写。切换场景时* SceneManager调用
  • isReady() 场景是否准备好。主要是create后要load图形。SceneManager根据这个函数来判断。 调用create()后可能需要时间准备 这个函数可以根据实际情况重写
  • start() 开始 SceneManger根据IsReady()来判断调用时机。里面可以重写要做的事。
  • update() 每帧更新,由sceneManager调用
  • updateFade() 如果_fadeDuration>0 ,根据_fadeSign来处理淡入淡出
  • updateChildren() 依次调用children数组中的实例,运行update()
  • stop() 停止 this._active=false
  • isBusy() 是否正在忙碌。默认只检测是否在淡入淡出。可以自己扩展。
  • terminate() 空函数 结束时要做的是 子类重写里面的内容
  • createWindowLayer() 创建窗口层,窗口只能放在窗口层 有个_windowLayer属性,保存创建的窗口层
  • addWindow(window) 添加窗口到窗口层 this._windowLayer.addChild(window)
  • startFadeIn(duration,white) duration是帧数 white填true或false
  • popScene() 返回上一个场景 SceneManager.pop()
  • checkGameover() 检测游戏是否终止 其实就是判断$gameParty.isAllDead()
  • fadeOutAll() 缓慢淡出所有声音和场景显示
  • fadeSpeed() return 24
  • slowFadeSpeed() return this.fadeSpeed()*2

你可能感兴趣的:(RPGMaker MV的场景管理系统)