设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2277|回复: 0
打印 上一主题 下一主题

[原创发布] MV游戏操作录像 Record

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
跳转到指定楼层
1
发表于 2017-11-5 23:19:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 汪汪 于 2017-11-5 23:30 编辑

如题,一个记录玩家操作的插件....
bug应该很多啦...


JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // Record.js
  3. //=============================================================================
  4.  
  5. /*:
  6.  * @plugindesc 录像
  7.  * @author wangwang
  8.  *   
  9.  * @param Record
  10.  * @desc 插件 录像
  11.  * @default 汪汪
  12.  *   
  13.  *
  14.  * @help  
  15.  * //开始录像
  16.  * Record.start ()
  17.  * //播放
  18.  * Record.play(file) 播放一个录像文件,不选为最后这个
  19.  * //结束
  20.  * Record.end()  结束录像/播放
  21.  *
  22.  *
  23.  * //录像文件列表
  24.  * Record.files   是一个数组  []
  25.  * //最后文件
  26.  * Record.fileend ()
  27.  *
  28.  * //保存储存
  29.  * Record.save(name ,file)   name :名称  file :一个录像文件
  30.  * //保存id的录像 到 name 文件
  31.  * Record.saveId(name, id)
  32.  *
  33.  * //保存最后的录像 到 name 文件
  34.  * Record.saveEnd(name)  
  35.  *
  36.  *
  37.  * //读取储存
  38.  * Record.load(name)   name :名称     返回一个录像文件
  39.  * //读取name文件 并播放  
  40.  * Record.loadPlay(name)  
  41.  *
  42.  *
  43.  */
  44.  
  45.  
  46.  
  47.  
  48. function Record() {
  49.     throw new Error('This is a static class');
  50. }
  51.  
  52. Record.mode = "空"
  53. Record.files = []
  54. Record.wait = 0
  55.  
  56.  
  57. /**
  58.  *
  59.  * 键的记录读取
  60.  *
  61.  */
  62.  
  63.  
  64. /**等待开 */
  65. Record.waitOpen = function(value) {
  66.     if (value > this.wait) {
  67.         this.wait = value
  68.     }
  69. }
  70.  
  71. /**等待关 */
  72. Record.waitClose = function(value) {
  73.     if (value >= this.wait && this.wait) {
  74.         this.wait = 0
  75.     }
  76. }
  77.  
  78.  
  79. /**记录键 */
  80. Record.push = function(result) {
  81.     var result = result === false ? 0 : result === true ? 1 : result
  82.     if (this.kind != result) {
  83.         if (this.counts) {
  84.             this.infos.push([this.kind, this.counts || 1])
  85.             this.pos += 1
  86.             this.counts = 0
  87.         }
  88.         this.kind = result
  89.     }
  90.     this.counts = (this.counts || 0) + 1
  91.     return result
  92. }
  93.  
  94.  
  95. /**还原键 */
  96. Record.pop = function(result) {
  97.     if (!this.counts) {
  98.         var key = this.infos[this.pos++]
  99.         if (!key) {
  100.             this.end(true)
  101.             return result
  102.         }
  103.         this.counts = key[1]
  104.         this.kind = key[0]
  105.         this.counts -= 1
  106.         return this.kind
  107.     } else {
  108.         this.counts -= 1
  109.         return this.kind
  110.     }
  111. }
  112.  
  113.  
  114.  
  115. /**获取值 */
  116. Record.value = function(that, fun, arr) {
  117.     var result = this._call[fun].apply(that, arr)
  118.     if (this.wait) {
  119.         if (fun != "Math_random" && fun != "Math_randomInt") {
  120.             return 0
  121.         }
  122.     }
  123.     if (this.mode == "录制") {
  124.         return this.push(result)
  125.     }
  126.     if (this.mode == "播放") {
  127.         return this.pop(result)
  128.     }
  129.     return result
  130. }
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137. /**
  138.  *
  139.  * 录像数据处理
  140.  *
  141.  */
  142. /**场景名称 */
  143. Record.sn = function(constructor) {
  144.         return constructor.name
  145.     }
  146.     /**名称场景 */
  147. Record.ns = function(name) {
  148.     return window[name]
  149. }
  150.  
  151. /**获取存档 */
  152. Record.saveData = function(scene) {
  153.     $gameSystem.onBeforeSave();
  154.     var data = {}
  155.     data.scene = null
  156.     data.stack = []
  157.     if (scene) {
  158.         data.scene = scene
  159.         SceneManager._stack = []
  160.     } else {
  161.         data.scene = this.sn(SceneManager._scene.constructor)
  162.         for (var i = 0; i < SceneManager._stack.length; i++) {
  163.             data.stack[i] = this.sn(SceneManager._stack[i])
  164.         }
  165.     }
  166.     if (data.scene == "Scene_Title" || data.scene == "Scene_Boot") {
  167.         data.save = 0
  168.     } else {
  169.         data.save = DataManager.makeSaveContents()
  170.     }
  171.     data.config = ConfigManager.makeData()
  172.     SceneManager.goto(this.ns(data.scene));
  173.     return JsonEx.stringify(data)
  174. }
  175.  
  176. /**读取存档 */
  177. Record.loadData = function(json) {
  178.     DataManager.createGameObjects();
  179.     var data = JsonEx.parse(json)
  180.     if (data) {
  181.         if (data.save) {
  182.             DataManager.extractSaveContents(data.save);
  183.             if ($gameSystem.versionId() !== $dataSystem.versionId) {
  184.                 $gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
  185.                 $gamePlayer.requestMapReload();
  186.             }
  187.         }
  188.         if (data.config) {
  189.             ConfigManager.applyData(data.config)
  190.         }
  191.         SceneManager._stack = []
  192.         if (data.stack) {
  193.             for (var i = 0; i < data.stack.length; i++) {
  194.                 SceneManager._stack[i] = this.ns(data.stack[i])
  195.             }
  196.         }
  197.         if (data.scene) {
  198.             SceneManager.goto(this.ns(data.scene));
  199.         }
  200.     }
  201. }
  202.  
  203. /**录像文件到json */
  204. Record.tojson = function(file) {
  205.     return JSON.stringify(file)
  206. }
  207.  
  208. /**json到录像文件 */
  209. Record.tofile = function(json) {
  210.     return JSON.parse(json)
  211. }
  212.  
  213. /**
  214.  * 录像的操作
  215.  */
  216.  
  217.  
  218. /**开始 */
  219. Record.start = function() {
  220.     this.end()
  221.     this.mode = "录制"
  222.     this.file = { save: this.saveData(), infos: this.infos = [] }
  223.     this.files.push(this.file)
  224.     this.pos = 0
  225.     this.counts = 0
  226.     this.kind = 0
  227. }
  228.  
  229. /**播放 */
  230. Record.play = function(file) {
  231.     this.end()
  232.     if (file) { this.file = file }
  233.     if (this.file) {
  234.         this.loadData(this.file.save)
  235.         this.infos = this.file.infos
  236.         this.mode = "播放"
  237.         this.pos = 0
  238.         this.counts = 0
  239.         this.kind = 0
  240.     }
  241. }
  242.  
  243. /**结束 */
  244. Record.end = function(v) {
  245.     if (this.file) {
  246.         if (this.mode == "录制") {
  247.             Record.push({})
  248.         }
  249.     }
  250.     this.mode = "空"
  251.     this.pos = 0
  252.     this.counts = 0
  253.     this.kind = 0
  254.     this.waitClose(2)
  255.         //console.log("end", this.file)
  256.     if (v) { alert("end") }
  257. }
  258.  
  259.  
  260. /**
  261.  *
  262.  * 录像数据保存
  263.  *
  264.  */
  265.  
  266. /**保存 */
  267. Record.save = function(name, file) {
  268.     StorageManager.save("record_" + name, this.tojson(file))
  269. }
  270.  
  271. /**保存id的录像 到 name 文件*/
  272. Record.saveId = function(name, id) {
  273.     this.save(name, this.files[id])
  274. }
  275.  
  276. /**最后一个文件 */
  277. Record.fileend = function() {
  278.     return Record.files[Record.files.length - 1]
  279. }
  280.  
  281. /**保存最后的录像 到 name 文件 */
  282. Record.saveEnd = function(name) {
  283.     this.save(name, this.fileend())
  284. }
  285.  
  286.  
  287. /**读取 */
  288. Record.load = function(name) {
  289.     return this.tofile(StorageManager.load("record_" + name))
  290. }
  291.  
  292. /**读取并播放 */
  293. Record.loadPlay = function(name) {
  294.     this.play(this.load(name))
  295. }
  296.  
  297.  
  298.  
  299. /**
  300.  *
  301.  * 录像卡点
  302.  *
  303.  */
  304.  
  305.  
  306. SceneManager.updateScene = function() {
  307.     if (this._scene) {
  308.         if (!this._sceneStarted && this._scene.isReady()) {
  309.             Record.waitClose(2)
  310.             this._scene.start();
  311.             this._sceneStarted = true;
  312.             this.onSceneStart();
  313.         }
  314.         if (this.isCurrentSceneStarted()) {
  315.             if (this._scene.isReady()) {
  316.                 Record.waitClose(1)
  317.                 this._scene.update();
  318.             } else {
  319.                 Record.waitOpen(1)
  320.             }
  321.         }
  322.     }
  323. };
  324. SceneManager.goto = function(sceneClass) {
  325.     Record.waitOpen(2)
  326.     if (sceneClass) {
  327.         this._nextScene = new sceneClass();
  328.     }
  329.     if (this._scene) {
  330.         this._scene.stop();
  331.     }
  332. };
  333.  
  334.  
  335.  
  336.  
  337. /**
  338.  *
  339.  * 请求录像记录
  340.  *
  341.  */
  342. Record._call = {}
  343. Record._call.Math_random = Math.random
  344. Math.random = function() {
  345.     return Record.value(this, "Math_random", arguments);
  346. };
  347. Record._call.Math_randomInt = function(max) {
  348.     return Math.floor(max * Record._call.Math_random())
  349. }
  350. Math.randomInt = function(max) {
  351.     return Record.value(this, "Math_randomInt", arguments);
  352. };
  353. Record._call.value = function(i) {
  354.     return i
  355. }
  356. Record._call.Input_isPressed = Input.isPressed
  357. Input.isPressed = function(keyName) {
  358.     return Record.value(this, "Input_isPressed", arguments);
  359. };
  360. Record._call.Input_isTriggered = Input.isTriggered
  361. Input.isTriggered = function(keyName) {
  362.     return Record.value(this, "Input_isTriggered", arguments);
  363. };
  364. Record._call.Input_isRepeated = Input.isRepeated
  365. Input.isRepeated = function(keyName) {
  366.     return Record.value(this, "Input_isRepeated", arguments);
  367. };
  368. Record._call.Input_isLongPressed = Input.isLongPressed
  369. Input.isLongPressed = function(keyName) {
  370.     return Record.value(this, "Input_isLongPressed", arguments);
  371. };
  372. Object.defineProperty(Input, 'dir4', {
  373.     get: function() {
  374.         return Record.value(this, "value", [this._dir4, "Input.dir8"]);
  375.     },
  376.     configurable: true
  377. });
  378. Object.defineProperty(Input, 'dir8', {
  379.     get: function() {
  380.         return Record.value(this, "value", [this._dir8, "Input.dir8"]);
  381.     },
  382.     configurable: true
  383. });
  384. Object.defineProperty(Input, 'date', {
  385.     get: function() {
  386.         return Record.value(this, "value", [this._date, "Input._date"]);
  387.     },
  388.     configurable: true
  389. });
  390. Record._call.TouchInput_isPressed = TouchInput.isPressed
  391. TouchInput.isPressed = function() {
  392.     return Record.value(this, "TouchInput_isPressed", arguments);
  393. };
  394. Record._call.TouchInput_isTriggered = TouchInput.isTriggered
  395. TouchInput.isTriggered = function() {
  396.     return Record.value(this, "TouchInput_isTriggered", arguments);
  397. };
  398. Record._call.TouchInput_isRepeated = TouchInput.isRepeated
  399. TouchInput.isRepeated = function() {
  400.     return Record.value(this, "TouchInput_isRepeated", arguments);
  401. };
  402. Record._call.TouchInput_isLongPressed = TouchInput.isLongPressed
  403. TouchInput.isLongPressed = function() {
  404.     return Record.value(this, "TouchInput_isLongPressed", arguments);
  405. };
  406. Record._call.TouchInput_isCancelled = TouchInput.isCancelled
  407. TouchInput.isCancelled = function() {
  408.     return Record.value(this, "TouchInput_isCancelled", arguments);
  409. };
  410. Record._call.TouchInput_isMoved = TouchInput.isMoved
  411. TouchInput.isMoved = function() {
  412.     return Record.value(this, "TouchInput_isMoved", arguments);
  413. };
  414. Record._call.TouchInput_isReleased = TouchInput.isReleased
  415. TouchInput.isReleased = function() {
  416.     return Record.value(this, "TouchInput_isReleased", arguments);
  417. };
  418. Object.defineProperty(TouchInput, 'wheelX', {
  419.     get: function() {
  420.         return Record.value(this, "value", [this._wheelX, "TouchInput._wheelX"]);
  421.     },
  422.     configurable: true
  423. });
  424. Object.defineProperty(TouchInput, 'wheelY', {
  425.     get: function() {
  426.         return Record.value(this, "value", [this._wheelY, "TouchInput._wheelY"]);
  427.     },
  428.     configurable: true
  429. });
  430.  
  431. Object.defineProperty(TouchInput, 'x', {
  432.     get: function() {
  433.         return Record.value(this, "value", [this._x, "TouchInput._x"]);
  434.     },
  435.     configurable: true
  436. });
  437. Object.defineProperty(TouchInput, 'y', {
  438.     get: function() {
  439.         return Record.value(this, "value", [this._y, "TouchInput._y"]);
  440.     },
  441.     configurable: true
  442. });
  443. Object.defineProperty(TouchInput, 'date', {
  444.     get: function() {
  445.         return Record.value(this, "value", [this._date, "TouchInput._date"]);
  446.     },
  447.     configurable: true
  448. });

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 塞糖

查看全部评分

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-5 09:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表