Scene_Title.prototype.createBackground = function() { this._backSprite1 = new Sprite(ImageManager.loadTitle1($dataSystem.title1Name)); this._backSprite2 = new Sprite(ImageManager.loadTitle2($dataSystem.title2Name)); this.addChild(this._backSprite1); this.addChild(this._backSprite2); };
var _myScene_Title_create = Scene_Title.prototype.create; Scene_Title.prototype.create = function() { _myScene_Title_create.call(this);//原本官方执行的方法不去动它的,他该怎么创建就怎么创建 //创建我们自己的背景; this.create_myTitleSprite(); };
Scene_Title.prototype.create_myTitleSprite = function(){ this._myBackSprite = new Sprite(ImageManager.loadParallax('SeaofClouds')); this.addChild(this._myBackSprite); };
var _myScene_Title_update = Scene_Title.prototype.update; Scene_Title.prototype.update = function() { _myScene_Title_update.call(this); this._myBackSprite.x += 1 ; }
Scene_Title.prototype.create_myTitleSprite = function(){ //this._myBackSprite = new Sprite(ImageManager.loadParallax('SeaofClouds'));//普通精灵 this._myBackSprite = new TilingSprite(ImageManager.loadParallax('SeaofClouds'));//平铺精灵 //平铺精灵需要设置他默认的位置,否则是看不到的 //通过平铺精灵的move函数设置他的位置 //参数1 TilingSprite(平铺精灵) 的 X 坐标 //参数2 TilingSprite(平铺精灵) 的 Y 坐标 //参数3 TilingSprite(平铺精灵) 的宽度 //参数4 TilingSprite(平铺精灵) 的高度 //这里的Graphics的width和height是游戏窗口显示的宽度和高度,我们这样设置就会让这个平铺精灵全部占满屏幕 this._myBackSprite.move(0,0,Graphics.width,Graphics.height); //将我们的精灵添加到标题页 this.addChild(this._myBackSprite); };
var _myScene_Title_update = Scene_Title.prototype.update; Scene_Title.prototype.update = function() { _myScene_Title_update.call(this); //this._myBackSprite.x += 1 ; this._myBackSprite.origin.x += 1 ; }
Scene_Title.prototype.create_myTitleSprite = function(){ //this._myBackSprite = new Sprite(ImageManager.loadParallax('SeaofClouds'));//普通精灵 this._myBackSprite = new TilingSprite(ImageManager.loadParallax('SeaofClouds'));//平铺精灵 //平铺精灵需要设置他默认的位置,否则是看不到的 //通过平铺精灵的move函数设置他的位置 //参数1 TilingSprite(平铺精灵) 的 X 坐标 //参数2 TilingSprite(平铺精灵) 的 Y 坐标 //参数3 TilingSprite(平铺精灵) 的宽度 //参数4 TilingSprite(平铺精灵) 的高度 //这里的Graphics的width和height是游戏窗口显示的宽度和高度,我们这样设置就会让这个平铺精灵全部占满屏幕 this._myBackSprite.move(0,0,Graphics.width,Graphics.height); this._myForeSprite = new Sprite(ImageManager.loadPicture('Package2_3'));//因为这里我仅是放一个人物立绘上去,所以就使用平铺精灵就好了 //设置人物立绘的位置 this._myForeSprite.anchor.x = 0.5; //设置立绘精灵的横向锚点,初始值是0,最大值为1,从左到右,最左是0,最右是1,这里设置的0.5就表示正中间 this._myForeSprite.anchor.y = 1; //设置立绘精灵的纵向锚点,初始值是0,最大值为1,从上到下,最上是0,最下是1,这里设置的1就表示最底部 this._myForeSprite.x = Graphics.width / 2; //设置立绘精灵的水平坐标为整个屏幕宽度的一半,与我们之前设置的横向锚点配合,立绘精灵就会在屏幕的水平正中间 this._myForeSprite.y = Graphics.height; //设置立绘精灵的纵向坐标为整个屏幕的高度,与我们之前设置的纵向锚点配合,立绘精灵的最底部就会跟屏幕的最底部重合 //将我们的精灵添加到标题页 this.addChild(this._myBackSprite); this.addChild(this._myForeSprite); };
Scene_Title.prototype.create_myTitleSprite = function(){ //this._myBackSprite = new Sprite(ImageManager.loadParallax('SeaofClouds'));//普通精灵 this._myBackSprite = new TilingSprite(ImageManager.loadParallax('SeaofClouds'));//平铺精灵 //平铺精灵需要设置他默认的位置,否则是看不到的 //通过平铺精灵的move函数设置他的位置 //参数1 TilingSprite(平铺精灵) 的 X 坐标 //参数2 TilingSprite(平铺精灵) 的 Y 坐标 //参数3 TilingSprite(平铺精灵) 的宽度 //参数4 TilingSprite(平铺精灵) 的高度 //这里的Graphics的width和height是游戏窗口显示的宽度和高度,我们这样设置就会让这个平铺精灵全部占满屏幕 this._myBackSprite.move(0,0,Graphics.width,Graphics.height); this._myForeSprite = new Sprite(ImageManager.loadPicture('Package2_3'));//因为这里我仅是放一个人物立绘上去,所以就使用平铺精灵就好了 //设置人物立绘 this._myForeSprite.anchor.x = 0.5; //设置立绘精灵的横向锚点,初始值是0,最大值为1,从左到右,最左是0,最右是1,这里设置的0.5就表示正中间 this._myForeSprite.anchor.y = 1; //设置立绘精灵的纵向锚点,初始值是0,最大值为1,从上到下,最上是0,最下是1,这里设置的1就表示最底部 this._myForeSprite.x = Graphics.width / 2; //设置立绘精灵的水平坐标为整个屏幕宽度的一半,与我们之前设置的横向锚点配合,立绘精灵就会在屏幕的水平正中间 this._myForeSprite.y = Graphics.height; //设置立绘精灵的纵向坐标为整个屏幕的高度,与我们之前设置的纵向锚点配合,立绘精灵的最底部就会跟屏幕的最底部重合 this._myForeSprite2 = new Sprite(ImageManager.loadPicture('Package2_3'));//背后闪现的幻影 //设置人物立绘的幻影,与人物立绘相同 this._myForeSprite2.anchor.x = 0.5; this._myForeSprite2.anchor.y = 1; this._myForeSprite2.x = Graphics.width / 2; this._myForeSprite2.y = Graphics.height; //将我们的精灵添加到标题页 this.addChild(this._myBackSprite); this.addChild(this._myForeSprite2); //这里添加的时候,我们首先是添加的幻影的那个精灵,再添加的立绘的精灵,因为我想达到的效果是在人物立绘的背后出现幻影,如果先添加立绘精灵的话,这个幻影就会在立绘精灵的前面闪动,这里各位可以试着调换一下顺序就明白了 this.addChild(this._myForeSprite); };
var _myScene_Title_update = Scene_Title.prototype.update; Scene_Title.prototype.update = function() { _myScene_Title_update.call(this); //this._myBackSprite.x += 1 ; this._myBackSprite.origin.x += 1 ; //幻想精灵透明度(Opacity)完全透明的时候,重置他的缩放和透明度 if(this._myForeSprite2.opacity <= 0){ this._myForeSprite2.opacity = 255; this._myForeSprite2.scale.x = 1; this_myForeSprite2.scale.y = 1 ; } //幻想精灵并没有完全透明的时候,我们让他的透明度一直减小,同时通过改变他的缩放来看上去一种扩散的感觉 else{ this._myForeSprite2.opacity -= 3 ; this._myForeSprite2scale.x += 0.003; this._myForeSprite2.scale.y += 0.003; }
/** * 使用过道具之后,弹出消息再回到道具页面 */ Scene_Map.prototype.start = function() { Scene_Base.prototype.start.call(this); //如果需要重新打开道具页面,则不清空栈 if(!$gameSystem._needReplayItemMenu){ SceneManager.clearStack(); } if (this._transfer) { this.fadeInForTransfer(); this._mapNameWindow.open(); $gameMap.autoplay(); } else if (this.needsFadeIn()) { this.startFadeIn(this.fadeSpeed(), false); } this.menuCalling = false; }; //为了不影响其他正常的消息展示,这里同样使用之前的标示来控制。当这个标示有效的时候,SceneManager.pop();让屏幕回到上一屏 var _my_Window_Message_terminateMessage = Window_Message.prototype.terminateMessage; Window_Message.prototype.terminateMessage = function() { _my_Window_Message_terminateMessage.call(this); if($gameSystem._needReplayItemMenu){ SceneManager.pop(); } }; //因为消息是在Scene_Map中的一个window,所以要显示消息的话,得回到Scene_Map中,所以这里把Scene_Map push进了栈堆,同时显示出消息 var _my_Scene_Item_useItem = Scene_Item.prototype.useItem; Scene_Item.prototype.useItem = function() { _my_Scene_Item_useItem.call(this); SceneManager.push(Scene_Map); $gameMessage.add('使用了:'+this.item().name); $gameSystem._needReplayItemMenu = true; }; //创建道具栏的分类的时候,调用我们的设置最后选择的分类的方法 var _my_Scene_Item_createCategoryWindow = Scene_Item.prototype.createCategoryWindow; Scene_Item.prototype.createCategoryWindow = function() { _my_Scene_Item_createCategoryWindow.call(this); this.setSelectLast(); }; //当分类栏点击确定的时候,把最后选择的分类栏的下标保存下来 var _my_Scene_Item_onCategoryOK = Scene_Item.prototype.onCategoryOk; Scene_Item.prototype.onCategoryOk = function() { _my_Scene_Item_onCategoryOK.call(this); $gameSystem._categoryWindowSelectInx = this._categoryWindow._index; }; //如果最后选择的分类栏的下标存在,则默认选中 Scene_Item.prototype.setSelectLast = function(){ if($gameSystem._needReplayItemMenu){ //关闭是否回到Scene_Map清空栈堆的标示 $gameSystem._needReplayItemMenu = false; this._categoryWindow._index = isNaN($gameSystem._categoryWindowSelectInx) ? 0 : $gameSystem._categoryWindowSelectInx; this._categoryWindow.activate(); } };
/*: * @plugindesc 主场景小提示插件 * @author BenJ * * * * @param tipIconPadding * @desc 如果带icon图标的话,文字与图标的间距 * @default 36 * * * @help * * Plugin Command: * * myTipWindow showTip msg #添加一条消息 * myTipWindow showTip msg iconId #添加一条带icon的消息 * * */ var parameters = PluginManager.parameters('myTipWindow'); var tipIconPadding = Number(parameters['tipIconPadding'] || 36); var _myGame_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command,args){ _myGame_Interpreter_pluginCommand.call(this); if(command == 'myTipWindow'){ $gameMap._showTip = true;//是否需要打开tip窗口 $gameMap._isShownTip = true;//tip窗口是否被打开 $gameMap._tip = { msg : args[0] ,//tip的文本 icon : args[1] //tip的图标 //showed : false //是否已经显示过该信息 防止一直刷新 }; this.setWaitMode('tipMessage'); } }; //修改Game_Map初始化,增加tip相关属性 var _jGame_Map_setup = Game_Map.prototype.setup; Game_Map.prototype.setup = function(mapId) { _jGame_Map_setup.call(this,mapId); this._showTip = false; this._isShownTip = false; this._tip = {}; }; //重写Scene_Map初始化部分窗口函数 var _jScene_Map_createAllWindows = Scene_Map.prototype.createAllWindows; Scene_Map.prototype.createAllWindows = function() { _jScene_Map_createAllWindows.call(this); this.createTipWindow(); }; //创建tipWindow加入到Scene_Map Scene_Map.prototype.createTipWindow = function() { this._tipWindow = new Window_JTip(); this.addWindow(this._tipWindow); }; //todo 自定义提示窗体 function Window_JTip() { this.initialize.apply(this, arguments); } Window_JTip.prototype = Object.create(Window_Base.prototype); Window_JTip.prototype.constructor = Window_JTip; Window_JTip.prototype.initialize = function() { var width = this.windowWidth(); var height = this.windowHeight(); Window_Base.prototype.initialize.call(this, (Graphics.width - width)/2, 200, width, height); this.openness = 0;//尝试了好多次,原来这就是关键点所在,初始化的时候,把openness设置为0的时候,调用open函数的时候,才会去刷新 }; //窗口宽度 Window_JTip.prototype.windowWidth = function() { return Number(this.width || 240); }; //窗口高度 Window_JTip.prototype.windowHeight = function() { return this.fittingHeight(1); }; //刷新tip窗口 Window_JTip.prototype.refresh = function(_tipArgs) { this.contents.clear(); //this.visible = $gameMap.isTipWindowShow(); if(_tipArgs){ //this.resetTipWindow(_tipArgs);//这个函数里面执行过显示窗口函数核心Bitmap的resize,如果在后面resize,会清空内容栏,具体我也没看到哪里在清空,但是事实如此 //todo 绘制消息板 var _cnTest = /[\u4E00-\u9FA5]/; var _msg = _tipArgs.msg.toString(); var _width = 0; //通过文字计算窗口大小 for(var i=0 ; i<_msg.length ; i++){ //判断是否为中文,不是中文,只用字体大小的一半 if(_cnTest.test(_msg[i])){ _width += this.standardFontSize() ; }else{ _width += this.standardFontSize() / 2 ; } } //添加默认内容左右padding _width += this.standardPadding() * 2; //是否包含icon if(_tipArgs.icon != undefined && _tipArgs.icon != 0){ _width += tipIconPadding; } this.width = _width; this.x = (Graphics.width - _width)/2; this.contents.resize(this.contentsWidth(),this.contentsHeight());//这里设置的内容的宽度,如果照官方的算法,这个宽度可能会显示不完我们的内容 //todo 绘制内容 //_tipArgs.showed = true; //显示过的信息改变此标示 if(_tipArgs.icon){ //显示带icon的信息 this.drawIcon(_tipArgs.icon,0,0); this.drawText(_tipArgs.msg.toString(),tipIconPadding,0); }else{ //显示普通信息 this.drawText(_tipArgs.msg.toString(),0,0); } } }; Window_JTip.prototype.update = function(){ Window_Base.prototype.update.call(this); //根据window_message的实现来看,弹出样式是打开和关闭的时候调用的updateOpen和updateClose while(!this.isOpening() && !this.isClosing()){ //在非打开中和非关闭中,调用一遍所有需要执行的东西 //message处理的方式是检测文本信息是否已经消费完来启动 if(this.updateInput()){ return; }else if(this.needShow()){ this.startTip(); }else{ return; } } }; //启动tip窗口 Window_JTip.prototype.startTip = function() { this.refresh($gameMap._tip); this.open(); $gameSystem.disableMenu(); $gameMap._showTip = false;//启动了窗口就把是否启动tip关掉,否则update一直刷新启动造成死循环了 this.pause = true;//启动了窗口,并且刷新了窗口之后,设置暂停 }; Window_JTip.prototype.needShow = function() { return $gameMap._showTip; }; Window_JTip.prototype.isTriggered = function() { return (Input.isRepeated('ok') || Input.isRepeated('cancel') || TouchInput.isRepeated()); }; //当窗口暂停,并且有按键触发,我们就关闭窗口 Window_JTip.prototype.updateInput = function() { if(this.pause){ if(this.isTriggered()){ $gameSystem.enableMenu(); this.pause = false; $gameMap._isShownTip = false; this.close(); } return true; }else{ return false; } }; //这里由于官方内定了好几种等待模式,而且写得比较死,我就直接在官方的函数里拓展了,增加了tipMessage的标示 Game_Interpreter.prototype.updateWaitMode = function() { var waiting = false; switch (this._waitMode) { case 'message': waiting = $gameMessage.isBusy(); break; case 'transfer': waiting = $gamePlayer.isTransferring(); break; case 'scroll': waiting = $gameMap.isScrolling(); break; case 'route': waiting = this._character.isMoveRouteForcing(); break; case 'animation': waiting = this._character.isAnimationPlaying(); break; case 'balloon': waiting = this._character.isBalloonPlaying(); break; case 'gather': waiting = $gamePlayer.areFollowersGathering(); break; case 'action': waiting = BattleManager.isActionForced(); break; case 'video': waiting = Graphics.isVideoPlaying(); break; case 'image': waiting = !ImageManager.isReady(); break; case 'tipMessage': waiting = $gameMap._isShownTip; break; } if (!waiting) { this._waitMode = ''; } return waiting; };
bulangnisi 发表于 2016-4-11 18:10
有几天没来更新了,在做其它的事儿
这会有空了,马上来把我的tip插件来完成了
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |