level 7
过段时间我会优化可读性并附上一份写这样一个插件的教程
/*:
* @author Created by 邪恶道具 on 2016/3/5.
*
* @param 图片数量
* @default 15
*
* @param 选项名
* @default 日记
*
* @param 初始化标签
* @default 0
*
* @param 功能选择
* @default 0
*
* @plugindesc
* 初始化标签为1时,初始化时显示所有图片,为0时隐藏所有图片
* 功能选择:1是默认,2和3非别是全部设置隐藏或显示
*
* @help
*
*
* 将需要使用的图片放入img文件夹中的diary文件夹内
* 文件名按照这种格式编辑 "diary (x).png",其中x为一个数字,此数字对应相应标签
* 因此该数字最好是连续的,如:diary (1).png ,diary (2).png...
* Book.png,这种名称的图片为背景图片
* 日记选项中显示的标签,需要自己新建一个diary_name.rpgsave文件
* diary_name.rpgsave文件中的内容使用UTF-8字符,用英文逗号分割
* 该文件需要放入save文件夹中
*
*
*/
var params = PluginManager.parameters("diary_new");
(function(){
var tabName = String(params['选项名'] || "请输入" );
//console.log("tagNum:"+tabName);
//通过needsCommand指令添加Menu菜单中的Diary选项
var _Window_MenuCommand_addMainCommands = Window_MenuCommand.prototype.addMainCommands;
Window_MenuCommand.prototype.addMainCommands = function(){
_Window_MenuCommand_addMainCommands.call(this);
if (this.needsCommand('diary')) {
//第一个参数是选项的名称,第二个则是对应createCommandWindow里的字符
this.addCommand(tabName, 'diary', 1);//TextManager.diary的值为'日记'
}
};
//将选项添加进去
var _Scene_Menu_createCommandWindow = Scene_Menu.prototype.createCommandWindow;
Scene_Menu.prototype.createCommandWindow = function(){
_Scene_Menu_createCommandWindow.call(this);
this._commandWindow.setHandler('diary', diary_command.bind(this));
};
})();
var diary_command = function(){
this._commandWindow.deselect();
run();
};
var diary_command_activate = function(){
SceneManager.goto(Scene_Menu);
};
/**
* Created by 邪恶道具 on 2016/3/5.
* 日记系统绘制窗口及其功能代码
* 图片读取是在状态机执行的间隔中进行的
*/
var functionSelection = Number(params['功能选择'] || "2" );
var photoNum = Number(params['图片数量'] || 15);//需要载入的图片数量,从1开始,而不是0(也就是表示1-11(11个),而不是往常的0-11(12个))
var run = function(){
if(!document.getElementById("theCanvas")){
create_canvas();
}else{
var theCanvas = document.getElementById("theCanvas");
theCanvas.style.zIndex = 20;
}
fileWriteAndRead( functionSelection,photoNum,null, null);
diary(photoNum);
};
var diary = function(photoNum) {
var theCanvas = document.getElementById("theCanvas");
var context = theCanvas.getContext("2d");
//状态机参数
var state_photoLoad = 1;
var state_initList = 2;
var state_windowDraw = 3;
var state_drawFont = 4;
var state_nextPage = 5;
var state_backPage = 6;
var state_end = 7;
var currentState = state_photoLoad;
//参数
var displayText = new Object();
displayText.flag = new Array();//为0显示"???",为1显示text属性的内容
displayText.text = new Array();//日记名称
displayText.maxLine = 12;//最大行数
displayText.textCount = 0;
var photoLoadedCount = 0;//负责已载入图片的计数
var offset = 2;//边框偏移量
var line_x = 200;//分割线x坐标
var currentPage = 1;//记录当前的页数,从1开始
var rememberNameCount = 0;
var coordinate = new Object();//该对象负责存储定位选项与显示的必要数据
coordinate.backGround = null;
coordinate.photoCache = new Array();//存储日记图片的数组
coordinate.font_x = new Array();
coordinate.font_y = new Array();
coordinate.font_height = new Array();
coordinate.font_width = new Array();
//临时参数
var global_Count = 0;
var global_Flag = 0;
var tempFlag = 0;
//coordinate.photoCache,从第0个元素开始是日记图片
var photoLoad = function () {
var backGround = new Image();
backGround.src = "img/diary/book.png";
backGround.addEventListener("load", load_done, false);
coordinate.backGround = backGround;
window.console.log("loading");
for (var i = 0; i < photoNum; i++) {
var number = i + 1;
var temp = new Image();
temp.src = "img/diary/diary (" + number + ").png";
temp.addEventListener("load", load_done, false);
coordinate.photoCache.push(temp);
}
//window.console.log("coordinate.photoCache.length:"+coordinate.photoCache.length);
currentState = state_end;
};
var initList = function () {
var temp = loadFile();
var tempName = string_Change_strArray();
for (var i = 0; i < coordinate.photoCache.length; i++) {
displayText.text.push(tempName[i]);
}
for(var i = 0;i < temp.length;i++){
if(temp[i]==0||temp[i]==1){
displayText.flag.push(temp[i]);
}
}
currentState = state_windowDraw;
};
//将中文字符串转换成数组
var string_Change_strArray = function () {
var fs = require('fs');
var fileName = "diary_name.rpgsave";
var savePath = StorageManager.localFileDirectoryPath() + fileName;
var data = fs.readFileSync(savePath,"utf-8");
var temp = data.split(",");
var tempArray = new Array();
for(var i=0;i<temp.length;i++) {
if (temp[i] != ",") {
tempArray.push(temp[i]);
}
}
return tempArray;
};
var loadFile = function () {
var fs = require('fs');
var fileName = "diary.rpgsave";
var savePath = StorageManager.localFileDirectoryPath() + fileName;
var readData = null;
readData = fs.readFileSync(savePath);
readData = ""+readData;
return readData;
};
var load_done = function () {
photoLoadedCount++;
//coordinate.photoCache.length + 1,背景图加上日记图片的数量
if (photoLoadedCount == (coordinate.photoCache.length + 1)) {
coordinate.backGround.removeEventListener("load", load_done, false);
for (var i = 0; i < coordinate.photoCache.length; i++) {
coordinate.photoCache[i].removeEventListener("load", load_done, false);
}
currentState = state_initList;
coordinate.time = setInterval(stateMachine, 33);
console.log("loaded");
photoLoadedCount--;//这下才是日记图片数(-1是为了去掉背景的计数)
}
};
2016年04月22日 14点04分



