Project1

标题: 有没有人知道内置脚本的的循环是怎样进行的 [打印本页]

作者: kys2016    时间: 2017-7-7 14:16
标题: 有没有人知道内置脚本的的循环是怎样进行的
本帖最后由 kys2016 于 2017-7-8 01:32 编辑

内置脚本里很多代码都是每帧执行一次,但是为什么从头到尾都找不到跟循环有关的语句
作者: kys2016    时间: 2017-7-7 14:23
本帖最后由 kys2016 于 2017-7-8 01:28 编辑

已解决,循环的根源在7楼。
作者: 翻滚牛宝宝    时间: 2017-7-7 16:39

  1. /** Loop 循环*/
  2. Game_Interpreter.prototype.command112 = function () {
  3.     //返回 true
  4.     return true;
  5. };

  6. /** Repeat Above 重复上述*/
  7. Game_Interpreter.prototype.command413 = function () {
  8.     //运行{
  9.     do {
  10.         //索引--
  11.         this._index--;
  12.         //当 (当前命令 缩进 !== 缩进)
  13.     } while (this.currentCommand().indent !== this._indent);
  14.     //返回 true
  15.     return true;
  16. };

  17. /** Break Loop 断开循环*/
  18. Game_Interpreter.prototype.command113 = function () {
  19.     //当(索引 < 列表 长度 - 1 )
  20.     while (this._index < this._list.length - 1) {
  21.         //索引++
  22.         this._index++;
  23.         //命令 = 当前命令()
  24.         var command = this.currentCommand();
  25.         //如果 (命令 编码 === 413 并且 命令 缩进 < 缩进 )
  26.         if (command.code === 413 && command.indent < this._indent) {
  27.             //中断
  28.             break;
  29.         }
  30.     }
  31.     //返回 true
  32.     return true;
  33. };
复制代码

MV自带的插件是这样  不知道你要实现什么  有啥问题的话可以到群277713429里 大家一起讨论
作者: kys2016    时间: 2017-7-7 16:50
@翻滚牛宝宝 举个简单的例子,rpg_objects.js下的Game_Timer类的update函数,这个函数就是让this._frame每帧减一,但是在这里只能看到让this._frame减一的代码,那么让它每帧执行一次的代码在哪里呢?
  1. Game_Timer.prototype.update = function(sceneActive) {
  2.     if (sceneActive && this._working && this._frames > 0) {
  3.         this._frames--;
  4.         if (this._frames === 0) {
  5.             this.onExpire();
  6.         }
  7.     }
  8. };
复制代码

作者: kys2016    时间: 2017-7-7 16:57
本帖最后由 kys2016 于 2017-7-7 17:09 编辑

我觉得在内置脚本中应该有一个地方是控制这个循环的。
作者: maaj300130    时间: 2017-7-7 21:58
写在update里就是一秒执行60次,所以你发的计时就是1秒60帧,明白没,你F8打开测试一个一直update的你就看出来了
作者: 在野月光    时间: 2017-7-7 22:06


作者: ekmomo    时间: 2017-7-8 04:37
本帖最后由 ekmomo 于 2017-7-8 04:43 编辑

“内置脚本里很多代码都是每帧执行一次” 这个观点本身就是错误的

简单的说:所有代码都是调用才执行(运行)。
对于MV来说,只有写在function以外代码会被执行及DOM Event会响应执行。他们的实质是window对象的一次运行
游戏开始时仅仅是执行了一次 Onload(Main.js)来调用SceneManager和Scene_Boot。

window.onload = function() {
    SceneManager.run(Scene_Boot);
}

如果你把SceneManager.run(Scene_Boot)改成alert('Hello RPGMaker')的话游戏内的任何代码都不会执行。                              最直观的例子就是如果你在插件中改了分辨率而不去调用SceneManager的话分辨率是不会有任何变化的。

当然,以上仅仅是简单的说。事实上,JS的结构相当有趣。

代码总是被截……我就不举例子了……





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1