Project1

标题: MV Black Room (类似于VA的Black room by VIPArcher) [打印本页]

作者: garfeng    时间: 2016-9-19 21:42
标题: MV Black Room (类似于VA的Black room by VIPArcher)
本帖最后由 garfeng 于 2016-9-19 22:01 编辑

近期移植的MV屋顶遮挡:https://rpg.blue/forum.php?mod=viewthread&tid=396305

效果:



把下面的代码存储为black_room.js,放进js/plugins/目录,然后在插件管理器里调用。
地图添加note:


JAVASCRIPT 代码复制
  1. "use strict"
  2.  
  3. /*:
  4.  * @plugindesc Black Room.
  5.  * @author Garfeng
  6.  *
  7.  * @param Tile Width
  8.  * @desc 一格的尺寸,默认48
  9.  * @default 48
  10.  *
  11.  * @param Padding
  12.  * @desc 内边距(0为全部填满颜色,我自用设为24)
  13.  * @default 0
  14.  *
  15.  * @param Fade Speed
  16.  * @desc 渐变速度
  17.  * @default 10
  18.  *
  19.  * @param Black Room Color
  20.  * @desc 遮盖层的颜色,比如 rgba(255,0,0,1) 代表红色
  21.  * @default rgba(0,0,0,1)
  22.  *
  23.  * @param Black Room Z
  24.  * @desc 遮盖层的z坐标
  25.  * @default 9999
  26.  */
  27.  
  28. /* 使用方法:
  29.  * 地图添加注释,<broom></broom>内部必须为数组的json格式
  30.  * <broom>[
  31.  * [A_x1,A_y1,A_x2,A_y2],
  32.  * [B_x1,B_y1,B_x2,B_Y2]
  33.  * ]</broom>
  34.  *
  35.  * x1,y1 为左上角角点的坐标,x2,y2位右下角角点坐标
  36.  * 比如:我设置了三个区:
  37.  * <broom>
  38.  * [
  39.  *     [9,3,14,10],
  40.  *     [14,3,16,11],
  41.  *     [16,3,21,10]
  42.  * ]
  43. </broom>
  44.  */
  45.  
  46.  
  47. var Black_Room_RE = /<broom>([.\s\S]+)<\/broom>/i;
  48.  
  49. var parameters = PluginManager.parameters("black_room");
  50.  
  51. var FKCC = parseInt(parameters["Tile Width"]);
  52. var BLACK_ROOM_PADDING = parseInt(parameters["Padding"]);
  53. var BLACK_ROOM_FADE_SPEED = parseInt(parameters["Fade Speed"]);
  54. var Black_Room_Color = parameters["Black Room Color"];
  55. var Black_Room_Z = parseInt(parameters["Black Room Z"]);
  56.  
  57. var Garfeng_Spriteset_Map_initialize = Spriteset_Map.prototype.initialize;
  58. Spriteset_Map.prototype.initialize = function(){
  59.         Garfeng_Spriteset_Map_initialize.call(this);
  60.  
  61.         this.black_rooms = new Array();
  62.         this.black_rooms_sprite = new Array();
  63.  
  64.         let str = $dataMap.note;
  65.         let match = Black_Room_RE.exec(str);
  66.  
  67.         if (match != null) {
  68.             try {
  69.             this.black_rooms = JSON.parse(match[1]);
  70.         } catch (e) {
  71.             console.error(e);
  72.             console.log(match[1]);
  73.         }
  74.         if (this.black_rooms != null) {
  75.                 this.setupBlackRoom();
  76.         }
  77.         }
  78.  
  79. }
  80.  
  81. var Garfeng_Spriteset_Map_createLowerLayer = Spriteset_Map.prototype.createLowerLayer;
  82.  
  83. Spriteset_Map.prototype.createLowerLayer = function() {
  84.         Garfeng_Spriteset_Map_createLowerLayer.call(this);
  85. };
  86.  
  87.  
  88.  
  89. Spriteset_Map.prototype.checkPosIn = function(sp) {
  90.         let x = $gamePlayer._realX;
  91.     let y = $gamePlayer._realY;
  92.  
  93.         if (x >= sp["x"] && x <= sp["x2"] &&
  94.                 y >= sp["y"] && y <= sp["y2"]) {
  95.                 return true;
  96.         }
  97.         return false;
  98. };
  99.  
  100.  
  101.  
  102. Spriteset_Map.prototype.setupBlackRoom = function() {
  103.         for(var i = 0;i<this.black_rooms.length;i++){
  104.                  let d = this.black_rooms[i];
  105.                  let x = d[0] * FKCC;
  106.                 let y = d[1] * FKCC;
  107.                 let width = (d[2] - d[0] +1)*FKCC;
  108.                 let height = (d[3] - d[1] +1)*FKCC;
  109.                 let pad = BLACK_ROOM_PADDING;
  110.  
  111.                 let tmp = new Sprite();
  112.                 tmp.bitmap = new Bitmap(width,height);
  113.                 tmp.setFrame(0,0,width,height);
  114.                 tmp.move($gameMap.adjustX(d[0])*48 ,$gameMap.adjustY(d[1] )*48);
  115.                 //tmp.move(x,y);
  116.                 tmp.opacity = 255;
  117.                 tmp.z = Black_Room_Z;
  118.                 tmp.bitmap.fillRect(pad,pad,width-2*pad,height-2*pad,Black_Room_Color);
  119.  
  120.  
  121.                 let group = {};
  122.                 group.status = 0;
  123.                 group.sprite = tmp;
  124.                 group.pos = {
  125.                         "x":d[0],
  126.                         "y":d[1],
  127.                         "x2":d[2],
  128.                         "y2":d[3]
  129.                 };
  130.  
  131.                 if (this.checkPosIn(group.pos)) {
  132.                         tmp.opacity = 0;
  133.                 }
  134.                 this.black_rooms_sprite.push(group);
  135.                 this._tilemap.addChild(tmp);
  136.         }
  137. };
  138.  
  139. //0 不变,1 fadein,-1 fadeout
  140.  
  141.  
  142.  
  143. Spriteset_Map.prototype.updateBlackRoom = function(){
  144.         if (!this.black_rooms_sprite) {
  145.                 return;
  146.         }
  147.         for (var i = 0; i < this.black_rooms_sprite.length; i++) {
  148.                 let sp = this.black_rooms_sprite[i];
  149.                 if (this.checkPosIn(sp.pos)) {
  150.                         sp.status = -1;
  151.                 } else {
  152.                         sp.status = 1;
  153.                 }
  154.  
  155.                 let x = sp.pos.x ;
  156.                 let y = sp.pos.y ;
  157.                 //console.log(sp.sprite.opacity);
  158.  
  159.                 sp.sprite.move($gameMap.adjustX(x ) * 48 ,$gameMap.adjustY(y ) * 48);
  160.  
  161.                 if (sp.status == 1 && sp.sprite.opacity < 255) {
  162.                         sp.sprite.opacity += sp.status * BLACK_ROOM_FADE_SPEED;
  163.                 } else if (sp.status == -1 && sp.sprite.opacity > 0) {
  164.                         sp.sprite.opacity += sp.status * BLACK_ROOM_FADE_SPEED;
  165.                 }
  166.         }
  167. }
  168.  
  169. var Garfeng_Spriteset_Map_update = Spriteset_Map.prototype.update;
  170. Spriteset_Map.prototype.update = function (){
  171.         Garfeng_Spriteset_Map_update.call(this);
  172.         this.updateBlackRoom();
  173. }

作者: shenjun141414    时间: 2016-9-19 21:55
稳 有了 这个 就能做  隐藏任务 和隐藏宝箱了!
作者: 企鹅达达    时间: 2016-9-19 23:04
不能设置不规则边界稍微有点遗憾
作者: 魔力的觉醒    时间: 2016-10-12 21:01
这就尴尬了   这个脚本 在手机上运行没有效果    老司机什么时候上线了 解决一下啊
作者: 男儿何不带吴钩    时间: 2016-10-17 21:04
我居然测试不出来这个效果,好郁闷,好郁闷,感觉整个人都不好了,蓝瘦香菇
作者: 男儿何不带吴钩    时间: 2016-10-17 21:18
男儿何不带吴钩 发表于 2016-10-17 21:04
我居然测试不出来这个效果,好郁闷,好郁闷,感觉整个人都不好了,蓝瘦香菇 ...

终于搞定了,是我自己错了,把</broom>里的/打成\了
作者: 952193683    时间: 2017-7-3 12:18
没看懂,,,{:2_286:}




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1