设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4784|回复: 7
打印 上一主题 下一主题

[原创发布] MV Black Room (类似于VA的Black room by VIPArcher)

[复制链接]

Lv4.逐梦者

梦石
2
星屑
5520
在线时间
2564 小时
注册时间
2012-2-9
帖子
990

开拓者

跳转到指定楼层
1
发表于 2016-9-19 21:42:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 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. }

评分

参与人数 1星屑 +15 收起 理由
Kim_巧克力控 + 15 精品文章

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
11 小时
注册时间
2016-9-13
帖子
35
2
发表于 2016-9-19 21:55:16 | 只看该作者
稳 有了 这个 就能做  隐藏任务 和隐藏宝箱了!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
180
在线时间
829 小时
注册时间
2010-6-26
帖子
671
3
发表于 2016-9-19 23:04:07 | 只看该作者
不能设置不规则边界稍微有点遗憾
新手们!不要被看扁了!我们也会用论坛搜索,我们也会自己找脚本,我们也会自己点击关闭按钮旁边的小问号!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
199
在线时间
248 小时
注册时间
2012-4-29
帖子
386
4
发表于 2016-10-12 21:01:35 | 只看该作者
这就尴尬了   这个脚本 在手机上运行没有效果    老司机什么时候上线了 解决一下啊
你的意思就是要打架咯?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
1060
在线时间
4 小时
注册时间
2016-10-8
帖子
2
5
发表于 2016-10-17 21:04:34 | 只看该作者
我居然测试不出来这个效果,好郁闷,好郁闷,感觉整个人都不好了,蓝瘦香菇
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
1060
在线时间
4 小时
注册时间
2016-10-8
帖子
2
6
发表于 2016-10-17 21:18:15 | 只看该作者
男儿何不带吴钩 发表于 2016-10-17 21:04
我居然测试不出来这个效果,好郁闷,好郁闷,感觉整个人都不好了,蓝瘦香菇 ...

终于搞定了,是我自己错了,把</broom>里的/打成\了

评分

参与人数 1星屑 +120 收起 理由
garfeng + 120 摸摸头……

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
232 小时
注册时间
2014-8-1
帖子
144

开拓者

7
发表于 2017-7-3 12:18:48 | 只看该作者
没看懂,,,{:2_286:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-29 00:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表