/*: * @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是为了去掉背景的计数) } }; var windowDraw = function () { var width = theCanvas.width - offset; var height = theCanvas.height - offset; context.drawImage(coordinate.backGround, 0, 0); //给背景增加透明度 context.beginPath(); context.globalAlpha = 0.8; context.fillStyle = "#000000"; context.fillRect(0, 0, theCanvas.width, theCanvas.height); //绘制边框 context.beginPath(); context.lineWidth = 4; context.lineJoin = "round"; context.strokeStyle = "#FFFFFF"; context.moveTo(offset, offset); context.lineTo(width, offset); context.lineTo(width, height); context.lineTo(offset, height); context.closePath(); context.stroke(); //获取显示日记内容区域的信息 coordinate.diaryDisplayArea_minX = line_x; coordinate.diaryDisplayArea_maxX = width; coordinate.diaryDisplayArea_minY = offset; coordinate.diaryDisplayArea_maxY = height; context.beginPath(); context.moveTo(line_x, offset); context.lineTo(line_x, height); context.stroke(); currentState = state_drawFont; }; var drawFont = function () { var offset = 20; var tempStr = null; //var temp = displayText.maxLine + rememberNameCount; if(photoNum==(displayText.maxLine + rememberNameCount - 2)){ rememberNameCount--; currentPage--; } var length = displayText.maxLine + rememberNameCount; for (var i = rememberNameCount; i < length; i++) { if (displayText.flag[i] == 1) { tempStr = 0; } if(displayText.flag[i] == 0){ tempStr = 1; } if ((i + 1) == length) { if(global_Count == coordinate.photoCache.length-1 || (global_Count == coordinate.photoCache.length && tempFlag == 0)){ tempStr = 4; }else{ tempStr = 2; } } if(currentPage>1&&i==rememberNameCount){ tempStr = 3; } switch(tempStr){ case 0: tempStr = displayText.text[i]; if(global_Flag==0){ global_Count++; } break; case 1: tempStr = "???"; if(global_Flag==0){ global_Count++; } break; case 2: tempStr = "下一个"; break; case 3: tempStr = "上一个"; break; case 4: if(displayText.flag[i] == 1){ tempStr = displayText.text[i]; global_Count++; break; }else{ tempStr = "???"; global_Count++; break; } case null: tempStr = ""; window.console.log("无剩余图片"); break; } if(global_Count > coordinate.photoCache.length && tempFlag == 0){ global_Count = coordinate.photoCache.length; } var fontMaxWidth = line_x - offset; var fontSize = 30; var y = offset + fontSize; context.beginPath(); context.font = "normal " + fontSize + "px Arial"; context.fillStyle = "#FFFFFF"; var str_width = Math.round(context.measureText(tempStr).width); var x = ((line_x - offset) / 2) - Math.floor(str_width / 2) + 10;//使字体居中 context.fillText(tempStr, x, y * (i - rememberNameCount + 1), fontMaxWidth); coordinate.font_x.push(x); coordinate.font_y.push((y * (i- rememberNameCount + 1)) - fontSize);//不减去fontSize,那么y会位于字体下方 coordinate.font_width.push(str_width);//压入字符串宽度 //绘制字体下划线 context.beginPath(); context.strokeStyle = "#FFFFFF"; var fontOffset = 10; context.moveTo(x, y * (i- rememberNameCount + 1) + fontOffset); context.lineTo(x + str_width, y * (i- rememberNameCount + 1) + fontOffset); coordinate.font_height.push(fontSize + fontOffset);//压入字符串高度 context.stroke(); coordinate.fontOffset = fontOffset; } currentState = state_end; }; var game_end = function () { clearInterval(coordinate.time); }; var checkClick = function (event) { if(event.button == 2 || exitKey(event)){ exitDiary(theCanvas); }else{ var x = Math.round(event.pageX); var y = Math.round(event.pageY); //console.log("x:" + x); //console.log("y:" + y); for (var i = 0; i < coordinate.photoCache.length; i++) { if (displayText.flag[i] == 1 || displayText.flag[i] == 0) { //minBoundary和maxBoundary分别为选项的左右边界 var minX = coordinate.font_x[i]; var minY = coordinate.font_y[i]; var maxX = minX + Math.round(coordinate.font_width[i]); var maxY = minY + Math.round(coordinate.font_height[i]); var minBoundary = (x > minX && y > minY); var maxBoundary = (x < maxX && y < maxY); if (minBoundary && maxBoundary) { theCanvas.width = theCanvas.width; theCanvas.height = theCanvas.height; global_Flag = 1; windowDraw(); drawFont(); currentState = null; //获取设置图片位置的必要信息 if(displayText.flag[i+rememberNameCount] == 1){ var centext_width = coordinate.diaryDisplayArea_maxX - coordinate.diaryDisplayArea_minX; var centext_height = coordinate.diaryDisplayArea_maxY - coordinate.diaryDisplayArea_minY; var centerPoint_x = (centext_width / 2 + coordinate.diaryDisplayArea_minX); var centerPoint_y = (centext_height / 2 + coordinate.diaryDisplayArea_minY); var photo_width = coordinate.photoCache[i+rememberNameCount].width / 2; var photo_height = coordinate.photoCache[i+rememberNameCount].height / 2; var place_x = centerPoint_x - photo_width; var place_y = centerPoint_y - photo_height; } if ((i + 1) == displayText.maxLine && global_Count < coordinate.photoCache.length) { nextPage(); break; } if(i==0&¤tPage>1){ backPage(); break; } //日记内容显示部分 if(!(((i + 1) == displayText.maxLine)&&(i==0&¤tPage>1))) { if(displayText.flag[i+rememberNameCount] == 1){ context.drawImage(coordinate.photoCache[i+rememberNameCount], place_x, place_y); break; } } } } } } }; //diary窗口的退出函数 var exitDiary = function(theCanvas){ theCanvas.removeEventListener("mouseup", checkClick,false); document.removeEventListener("keyup", checkClick,false); theCanvas.style.zIndex = -20; diary_command_activate(); theCanvas.width = theCanvas.width; theCanvas.height = theCanvas.height; window.console.log("退出完成"); }; var exitKey = function(event){ switch (event.keyCode){ case 27: return true; break; /* case 93: return true; break;*/ } }; var nextPage = function () { if(global_Count < photoNum){ tempFlag = 0; } global_Count++; currentPage++; rememberNameCount++; theCanvas.width = theCanvas.width; theCanvas.height = theCanvas.height; windowDraw(); drawFont(); currentState = null; }; var backPage = function () { if(global_Count == photoNum && tempFlag == 0){ global_Count--; } tempFlag = 1; global_Count--; currentPage--; rememberNameCount--; theCanvas.width = theCanvas.width; theCanvas.height = theCanvas.height; windowDraw(); drawFont(); currentState = null; }; var stateMachine = function () { switch (currentState) { case state_photoLoad: photoLoad(); break; case state_initList: initList(); break; case state_windowDraw: windowDraw(); break; case state_drawFont: drawFont(); break; case state_nextPage: nextPage(); break; case state_backPage: backPage(); break; case state_end: game_end(); break; case null: //window.console.log("错误的状态值"); break; } }; document.addEventListener('keyup', checkClick,false); theCanvas.addEventListener("mouseup", checkClick, false); coordinate.time = setInterval(stateMachine, 33); }; var create_canvas = function(){ var theCanvas = document.createElement("canvas"); if(!theCanvas){ document.write("no support canvas"); return ; } //mv的是816*624 theCanvas.width = 816; theCanvas.height = 624; theCanvas.style.position = "absolute"; theCanvas.style.margin = "auto"; theCanvas.style.top = 0 + "px"; theCanvas.style.left = 0 + "px"; theCanvas.style.right = 0 + "px"; theCanvas.style.bottom = 0 + "px"; theCanvas.style.zIndex = 20; theCanvas.id = "theCanvas"; document.body.appendChild(theCanvas); return theCanvas; }; /** * Created by 邪恶道具 on 16-4-19. * 负责文件的读取与存储,使用node.js */ var fileDisplay = Number(params['初始化标签'] || "0" ); var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { _Game_Interpreter_pluginCommand.call(this, command, args); console.log("functionSelection:"+functionSelection); fileWriteAndRead( functionSelection,photoNum,command, args); }; //第1个和3个参数决定运行那个函数,第2个参数表示有多少图片,第4个参数是插件变量 //第1个参数是手动指定 fileWriteAndRead = function(select,photoNum,command, args) { var fs = require('fs'); var fileName = "diary.rpgsave"; var savePath = StorageManager.localFileDirectoryPath() + fileName; var length = photoNum;//为图片数量 //intiData只在初始化时使用 var initData = null; var readData = null; console.log("select2:"+select); var initFile = function () { initData = new Array(length); for (var i = 0; i < length; i++) { initData[i] = fileDisplay; } saveFile(initData); }; var saveFile = function (data) { fs.writeFileSync(savePath, data,"utf-8"); }; var loadFile = function () { readData = fs.readFileSync(savePath,"utf-8"); readData = string_Change_array(readData); return readData; }; //index为要修改的位置,flag的值为0和1 var changeFlag = function () { readData = loadFile(); var count = 0; for(var i=0;i<readData.length;i++){ if (count == args[0]) { readData[count] = args[1]; break; } if((i % 2) == 0){ count++; } } saveFile(readData); }; //将数字字符串转换成数组 var string_Change_array = function (data) { var temp = data.split(""); var tempArray = new Array(); for(var i=0;i<temp.length;i++){ if(temp[i]==1||temp[i]==0){ tempArray.push(temp[i]); } } return tempArray; }; //将中文字符串转换成数组 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 exist = function () { //为真表示文件已存在 if (!fs.existsSync(savePath)) { initFile(); } else { loadFile(); } switch (command) { case "changeFlag": changeFlag(); break; case "string_Change_strArray": string_Change_strArray(); break; case null: //console.log("指令为空"); break; } }; var reInitFile = function(flag){ console.log("进入reInitFile"); var temp = null; if(flag == 2){ temp = 0; }else{ temp = 1; } readData = loadFile(); for(var i=0;i<readData.length;i++){ if (readData[i] != ",") { readData[i] = temp; } } console.log("reInitFile_readData:"+readData); saveFile(readData); }; var run = function(select) { var temp = 2; switch (select) { case 1: exist(); break; case 2: reInitFile(temp); break; case 3: reInitFile(temp+1); break; } }; run(select); };
QQ截图20160425163725.png (50.04 KB, 下载次数: 24)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |