查看: 5888|回复: 7

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

[复制链接]
梦石
2
星屑
5550
在线时间
2566 小时
注册时间
2012-2-9
回帖
947

开拓者

发表于 2016-9-19 21:42:35 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 garfeng 于 2016-9-19 22:01 编辑

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

效果:
1.gif


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

[pre lang="javascript"]"use strict"

/*:
* @plugindesc Black Room.
* @author Garfeng
*
* @param Tile Width
* @desc 一格的尺寸,默认48
* @default 48
*
* @param Padding
* @desc 内边距(0为全部填满颜色,我自用设为24)
* @default 0
*
* @param Fade Speed
* @desc 渐变速度
* @default 10
*
* @param Black Room Color
* @desc 遮盖层的颜色,比如 rgba(255,0,0,1) 代表红色
* @default rgba(0,0,0,1)
*
* @param Black Room Z
* @desc 遮盖层的z坐标
* @default 9999
*/

/* 使用方法:
* 地图添加注释,<broom></broom>内部必须为数组的json格式
* <broom>[
* [A_x1,A_y1,A_x2,A_y2],
* [B_x1,B_y1,B_x2,B_Y2]
* ]</broom>
*
* x1,y1 为左上角角点的坐标,x2,y2位右下角角点坐标
* 比如:我设置了三个区:
* <broom>
* [
*     [9,3,14,10],
*     [14,3,16,11],
*     [16,3,21,10]
* ]
</broom>
*/


var Black_Room_RE = /<broom>([.\s\S]+)<\/broom>/i;

var parameters = PluginManager.parameters("black_room");

var FKCC = parseInt(parameters["Tile Width"]);
var BLACK_ROOM_PADDING = parseInt(parameters["Padding"]);
var BLACK_ROOM_FADE_SPEED = parseInt(parameters["Fade Speed"]);
var Black_Room_Color = parameters["Black Room Color"];
var Black_Room_Z = parseInt(parameters["Black Room Z"]);

var Garfeng_Spriteset_Map_initialize = Spriteset_Map.prototype.initialize;
Spriteset_Map.prototype.initialize = function(){
        Garfeng_Spriteset_Map_initialize.call(this);
       
        this.black_rooms = new Array();
        this.black_rooms_sprite = new Array();

        let str = $dataMap.note;
        let match = Black_Room_RE.exec(str);

        if (match != null) {
            try {
            this.black_rooms = JSON.parse(match[1]);
        } catch (e) {
            console.error(e);
            console.log(match[1]);
        }
        if (this.black_rooms != null) {
                this.setupBlackRoom();
        }
        }

}

var Garfeng_Spriteset_Map_createLowerLayer = Spriteset_Map.prototype.createLowerLayer;

Spriteset_Map.prototype.createLowerLayer = function() {
        Garfeng_Spriteset_Map_createLowerLayer.call(this);
};



Spriteset_Map.prototype.checkPosIn = function(sp) {
        let x = $gamePlayer._realX;
    let y = $gamePlayer._realY;

        if (x >= sp["x"] && x <= sp["x2"] &&
                y >= sp["y"] && y <= sp["y2"]) {
                return true;
        }
        return false;
};



Spriteset_Map.prototype.setupBlackRoom = function() {
        for(var i = 0;i<this.black_rooms.length;i++){
                 let d = this.black_rooms;
                 let x = d[0] * FKCC;
                let y = d[1] * FKCC;
                let width = (d[2] - d[0] +1)*FKCC;
                let height = (d[3] - d[1] +1)*FKCC;
                let pad = BLACK_ROOM_PADDING;

                let tmp = new Sprite();
                tmp.bitmap = new Bitmap(width,height);
                tmp.setFrame(0,0,width,height);
                tmp.move($gameMap.adjustX(d[0])*48 ,$gameMap.adjustY(d[1] )*48);
                //tmp.move(x,y);
                tmp.opacity = 255;
                tmp.z = Black_Room_Z;
                tmp.bitmap.fillRect(pad,pad,width-2*pad,height-2*pad,Black_Room_Color);


                let group = {};
                group.status = 0;
                group.sprite = tmp;
                group.pos = {
                        "x":d[0],
                        "y":d[1],
                        "x2":d[2],
                        "y2":d[3]
                };

                if (this.checkPosIn(group.pos)) {
                        tmp.opacity = 0;
                }
                this.black_rooms_sprite.push(group);
                this._tilemap.addChild(tmp);
        }
};

//0 不变,1 fadein,-1 fadeout



Spriteset_Map.prototype.updateBlackRoom = function(){
        if (!this.black_rooms_sprite) {
                return;
        }
        for (var i = 0; i < this.black_rooms_sprite.length; i++) {
                let sp = this.black_rooms_sprite;
                if (this.checkPosIn(sp.pos)) {
                        sp.status = -1;
                } else {
                        sp.status = 1;
                }

                let x = sp.pos.x ;
                let y = sp.pos.y ;
                //console.log(sp.sprite.opacity);

                sp.sprite.move($gameMap.adjustX(x ) * 48 ,$gameMap.adjustY(y ) * 48);

                if (sp.status == 1 && sp.sprite.opacity < 255) {
                        sp.sprite.opacity += sp.status * BLACK_ROOM_FADE_SPEED;
                } else if (sp.status == -1 && sp.sprite.opacity > 0) {
                        sp.sprite.opacity += sp.status * BLACK_ROOM_FADE_SPEED;
                }
        }
}

var Garfeng_Spriteset_Map_update = Spriteset_Map.prototype.update;
Spriteset_Map.prototype.update = function (){
        Garfeng_Spriteset_Map_update.call(this);
        this.updateBlackRoom();
}[/pre]

评分

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

查看全部评分

梦石
0
星屑
50
在线时间
11 小时
注册时间
2016-9-13
回帖
29
发表于 2016-9-19 21:55:16 | 显示全部楼层
稳 有了 这个 就能做  隐藏任务 和隐藏宝箱了!
回复

使用道具 举报

梦石
0
星屑
62
在线时间
839 小时
注册时间
2010-6-26
回帖
652
发表于 2016-9-19 23:04:07 | 显示全部楼层
不能设置不规则边界稍微有点遗憾
新手们!不要被看扁了!我们也会用论坛搜索,我们也会自己找脚本,我们也会自己点击关闭按钮旁边的小问号!
回复

使用道具 举报

梦石
0
星屑
199
在线时间
248 小时
注册时间
2012-4-29
回帖
313
发表于 2016-10-12 21:01:35 | 显示全部楼层
这就尴尬了   这个脚本 在手机上运行没有效果    老司机什么时候上线了 解决一下啊
你的意思就是要打架咯?
回复

使用道具 举报

梦石
0
星屑
1060
在线时间
4 小时
注册时间
2016-10-8
回帖
2
发表于 2016-10-17 21:04:34 | 显示全部楼层
我居然测试不出来这个效果,好郁闷,好郁闷,感觉整个人都不好了,蓝瘦香菇
回复

使用道具 举报

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

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

评分

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

查看全部评分

回复

使用道具 举报

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

开拓者

发表于 2017-7-3 12:18:48 | 显示全部楼层
没看懂,,,{:2_286:}
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部