MV游戏操作录像 Record
如题,一个记录玩家操作的插件....bug应该很多啦...
JAVASCRIPT 代码下载
//=============================================================================
// Record.js
//=============================================================================
/*:
* @plugindesc 录像
* @author wangwang
*
* @param Record
* @desc 插件 录像
* @default 汪汪
*
*
* @help
* //开始录像
* Record.start ()
* //播放
* Record.play(file) 播放一个录像文件,不选为最后这个
* //结束
* Record.end()结束录像/播放
*
*
* //录像文件列表
* Record.files 是一个数组[]
* //最后文件
* Record.fileend ()
*
* //保存储存
* Record.save(name ,file) name :名称file :一个录像文件
* //保存id的录像 到 name 文件
* Record.saveId(name, id)
*
* //保存最后的录像 到 name 文件
* Record.saveEnd(name)
*
*
* //读取储存
* Record.load(name) name :名称 返回一个录像文件
* //读取name文件 并播放
* Record.loadPlay(name)
*
*
*/
function Record(){
thrownew Error('This is a static class');
}
Record.mode = "空"
Record.files = []
Record.wait = 0
/**
*
* 键的记录读取
*
*/
/**等待开 */
Record.waitOpen = function(value){
if(value > this.wait){
this.wait = value
}
}
/**等待关 */
Record.waitClose = function(value){
if(value >= this.wait && this.wait){
this.wait = 0
}
}
/**记录键 */
Record.push = function(result){
var result = result === false ? 0 : result === true ? 1 : result
if(this.kind != result){
if(this.counts){
this.infos.push()
this.pos += 1
this.counts = 0
}
this.kind = result
}
this.counts = (this.counts || 0) + 1
return result
}
/**还原键 */
Record.pop = function(result){
if(!this.counts){
var key = this.infos
if(!key){
this.end(true)
return result
}
this.counts = key
this.kind = key
this.counts -= 1
returnthis.kind
}else{
this.counts -= 1
returnthis.kind
}
}
/**获取值 */
Record.value = function(that, fun, arr){
var result = this._call.apply(that, arr)
if(this.wait){
if(fun != "Math_random" && fun != "Math_randomInt"){
return0
}
}
if(this.mode == "录制"){
returnthis.push(result)
}
if(this.mode == "播放"){
returnthis.pop(result)
}
return result
}
/**
*
* 录像数据处理
*
*/
/**场景名称 */
Record.sn = function(constructor){
return constructor.name
}
/**名称场景 */
Record.ns = function(name){
return window
}
/**获取存档 */
Record.saveData = function(scene){
$gameSystem.onBeforeSave();
var data = {}
data.scene = null
data.stack = []
if(scene){
data.scene = scene
SceneManager._stack = []
}else{
data.scene = this.sn(SceneManager._scene.constructor)
for(var i = 0; i < SceneManager._stack.length; i++){
data.stack = this.sn(SceneManager._stack)
}
}
if(data.scene == "Scene_Title" || data.scene == "Scene_Boot"){
data.save = 0
}else{
data.save = DataManager.makeSaveContents()
}
data.config = ConfigManager.makeData()
SceneManager.goto(this.ns(data.scene));
return JsonEx.stringify(data)
}
/**读取存档 */
Record.loadData = function(json){
DataManager.createGameObjects();
var data = JsonEx.parse(json)
if(data){
if(data.save){
DataManager.extractSaveContents(data.save);
if($gameSystem.versionId() !== $dataSystem.versionId){
$gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
$gamePlayer.requestMapReload();
}
}
if(data.config){
ConfigManager.applyData(data.config)
}
SceneManager._stack = []
if(data.stack){
for(var i = 0; i < data.stack.length; i++){
SceneManager._stack = this.ns(data.stack)
}
}
if(data.scene){
SceneManager.goto(this.ns(data.scene));
}
}
}
/**录像文件到json */
Record.tojson = function(file){
return JSON.stringify(file)
}
/**json到录像文件 */
Record.tofile = function(json){
return JSON.parse(json)
}
/**
* 录像的操作
*/
/**开始 */
Record.start = function(){
this.end()
this.mode = "录制"
this.file = { save: this.saveData(), infos: this.infos = []}
this.files.push(this.file)
this.pos = 0
this.counts = 0
this.kind = 0
}
/**播放 */
Record.play = function(file){
this.end()
if(file){this.file = file }
if(this.file){
this.loadData(this.file.save)
this.infos = this.file.infos
this.mode = "播放"
this.pos = 0
this.counts = 0
this.kind = 0
}
}
/**结束 */
Record.end = function(v){
if(this.file){
if(this.mode == "录制"){
Record.push({})
}
}
this.mode = "空"
this.pos = 0
this.counts = 0
this.kind = 0
this.waitClose(2)
//console.log("end", this.file)
if(v){alert("end")}
}
/**
*
* 录像数据保存
*
*/
/**保存 */
Record.save = function(name, file){
StorageManager.save("record_" + name, this.tojson(file))
}
/**保存id的录像 到 name 文件*/
Record.saveId = function(name, id){
this.save(name, this.files)
}
/**最后一个文件 */
Record.fileend = function(){
return Record.files
}
/**保存最后的录像 到 name 文件 */
Record.saveEnd = function(name){
this.save(name, this.fileend())
}
/**读取 */
Record.load = function(name){
returnthis.tofile(StorageManager.load("record_" + name))
}
/**读取并播放 */
Record.loadPlay = function(name){
this.play(this.load(name))
}
/**
*
* 录像卡点
*
*/
SceneManager.updateScene = function(){
if(this._scene){
if(!this._sceneStarted && this._scene.isReady()){
Record.waitClose(2)
this._scene.start();
this._sceneStarted = true;
this.onSceneStart();
}
if(this.isCurrentSceneStarted()){
if(this._scene.isReady()){
Record.waitClose(1)
this._scene.update();
}else{
Record.waitOpen(1)
}
}
}
};
SceneManager.goto = function(sceneClass){
Record.waitOpen(2)
if(sceneClass){
this._nextScene = new sceneClass();
}
if(this._scene){
this._scene.stop();
}
};
/**
*
* 请求录像记录
*
*/
Record._call = {}
Record._call.Math_random = Math.random
Math.random = function(){
return Record.value(this, "Math_random", arguments);
};
Record._call.Math_randomInt = function(max){
return Math.floor(max * Record._call.Math_random())
}
Math.randomInt = function(max){
return Record.value(this, "Math_randomInt", arguments);
};
Record._call.value = function(i){
return i
}
Record._call.Input_isPressed = Input.isPressed
Input.isPressed = function(keyName){
return Record.value(this, "Input_isPressed", arguments);
};
Record._call.Input_isTriggered = Input.isTriggered
Input.isTriggered = function(keyName){
return Record.value(this, "Input_isTriggered", arguments);
};
Record._call.Input_isRepeated = Input.isRepeated
Input.isRepeated = function(keyName){
return Record.value(this, "Input_isRepeated", arguments);
};
Record._call.Input_isLongPressed = Input.isLongPressed
Input.isLongPressed = function(keyName){
return Record.value(this, "Input_isLongPressed", arguments);
};
Object.defineProperty(Input, 'dir4', {
get: function(){
return Record.value(this, "value", );
},
configurable: true
});
Object.defineProperty(Input, 'dir8', {
get: function(){
return Record.value(this, "value", );
},
configurable: true
});
Object.defineProperty(Input, 'date', {
get: function(){
return Record.value(this, "value", );
},
configurable: true
});
Record._call.TouchInput_isPressed = TouchInput.isPressed
TouchInput.isPressed = function(){
return Record.value(this, "TouchInput_isPressed", arguments);
};
Record._call.TouchInput_isTriggered = TouchInput.isTriggered
TouchInput.isTriggered = function(){
return Record.value(this, "TouchInput_isTriggered", arguments);
};
Record._call.TouchInput_isRepeated = TouchInput.isRepeated
TouchInput.isRepeated = function(){
return Record.value(this, "TouchInput_isRepeated", arguments);
};
Record._call.TouchInput_isLongPressed = TouchInput.isLongPressed
TouchInput.isLongPressed = function(){
return Record.value(this, "TouchInput_isLongPressed", arguments);
};
Record._call.TouchInput_isCancelled = TouchInput.isCancelled
TouchInput.isCancelled = function(){
return Record.value(this, "TouchInput_isCancelled", arguments);
};
Record._call.TouchInput_isMoved = TouchInput.isMoved
TouchInput.isMoved = function(){
return Record.value(this, "TouchInput_isMoved", arguments);
};
Record._call.TouchInput_isReleased = TouchInput.isReleased
TouchInput.isReleased = function(){
return Record.value(this, "TouchInput_isReleased", arguments);
};
Object.defineProperty(TouchInput, 'wheelX', {
get: function(){
return Record.value(this, "value", );
},
configurable: true
});
Object.defineProperty(TouchInput, 'wheelY', {
get: function(){
return Record.value(this, "value", );
},
configurable: true
});
Object.defineProperty(TouchInput, 'x', {
get: function(){
return Record.value(this, "value", );
},
configurable: true
});
Object.defineProperty(TouchInput, 'y', {
get: function(){
return Record.value(this, "value", );
},
configurable: true
});
Object.defineProperty(TouchInput, 'date', {
get: function(){
return Record.value(this, "value", );
},
configurable: true
});
本帖来自P1论坛作者汪汪,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=403812若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]