Project1

标题: 如何实现《废都物语》式地图探索?(4月20日最终版) [打印本页]

作者: yuxuan1177    时间: 2019-3-17 21:44
标题: 如何实现《废都物语》式地图探索?(4月20日最终版)
本帖最后由 yuxuan1177 于 2019-4-20 18:27 编辑

4月20日已更新最终效果
……
新人正在做游戏,画师和脚本都就绪了。
准备用废都物语式的地图探索机制,但是《废都物语》之中的地图探索,是使用图块直接替换的命令,而在RMMV里面并不存在这种设计。
试过用全事件覆盖地图的方式,但平铺事件让地图变得很卡
也试过把地图拆成图片,但是角色图层在图片下面,而且图多也卡
请问,有没有简单便捷的实现方式呢?




……
第一次更新
……
感谢6Lwabcmcc大大和26Ltseyik大大的插件
目前已经半成功实现
方法:
利用MrTS_DarkRoomCovers.js将区域涂色成战争迷雾
利用TMRegionColor.js实现功能:区域替换(例如将区域1替换成区域2)
利用TMRegionPassable.js实现功能:区域通行限制
实现过程:
在插件MrTS_DarkRoomCovers.js中,将区域1设置为不涂色,区域2设置为迷雾,这样,区域1就是透明,而区域2则是黑色
利用TMRegionPassable.js,设置区域1为通行状态,区域2为不通行状态
利用TMRegionColor.js的指令,设置并行事件:唤出插件将区域2替换成区域1

不过有一个问题,就是区域替换之后,需要走一步黑色区域才会变化,效果有些不太理想……而且每一次变化都是临时的,所以必须要设置成并行事件……
但除此之外,功能倒是完全实现了
插件位置:
MrTS_DarkRoomCovers.js
https://github.com/Trivel/RMMV/blob/master/MrTS_DarkRoomCovers.js
TMRegionColor.js+TMRegionPassable.js
https://hikimoki.sakura.ne.jp/plugin/plugin_map.html



实现方法2:
在MrTS_DarkRoomCovers.js的基础上
利用RED_SetRegionID.js实现https://github.com/Hikitsune-Red ... /RED_SetRegionID.js
这个插件可以更改指定图块的区域,(X,Y,regionId),实现效果最直接,但需要一个个在地图上设置命令,小地图还好,大地图就需要一长串的指令,可以说是需要多少个图块,就需要多少个指令,当然,可以设置成区域,但也很繁琐……而且调整区域之后,同样需要走一步才能实现效果
这个方法的优点是,只需要设置一次,不需要用并行事件再度调整
问题都是一样
综合而言,方法1最简单
目前在想为啥需要走一步才会启动区域替换……

……
再度更新
……
现在已经完全实现效果
采用的是方法2调整
插件:
MrTS_DarkRoomCovers.js
TMRegionPassable.js
RED_SetRegionID.js

实现步骤:
1、使用脚本(非插件命令)$gameMap.setTileId(x,y),可以去除当前脚本的区域图块,变更为区域0,或者(X,Y,regID)调整为任意区域,不过这里实现效果用区域显示
2、在脚本下面加上一行插件命令RegionReveal [regID],从而将当前区域更变为透明的效果
3、在事件结束之后,当前区域图块立刻显示为透明,在行动了一步之后,$gameMap.setTileId(x,y)命令生效,将已经变成透明的区域变更为区域0
4、在地图出入口执行RegionReset命令,也就是将所有透明图块复位成迷雾,而之前的那些区域已经被修改为了区域0,所以并不会变成黑色
效果实现。
略有繁琐,但目前效果最好,而且没有多图层,只有单纯的几个命令,资源占用应该也不大,目前最完美效果
黑色区域为限制通行区域,看不到下层的地图,并且也无法通行,第二张图为触发了第一张的事件点之后开放,区域可以进入
第一张图比较暗,是因为顺便测试了一下手电筒效果
(, 下载次数: 454)
(, 下载次数: 456)
……
继续更新,失败了
如果前一张地图的大小和后一张一样,区域替换会被继承导致地图提前开放,无法解决……Orz
……

……
4月20日更新
……
找到最终解决方案了。
那就是设立一个并行事件。
并行事件设立RegionReveal 和changeRegion [指定区域] 0
这两个命令
然后在地图跳转口设立RegionReset命令
这样就解决
效果最好,就是害怕事件导致运行效率下降……
……
20日再度更新
……
区域替换对效率影响不大,现在可以安心使用了
(, 下载次数: 455)
这是实现临时清除迷雾效果
(, 下载次数: 463)
这是在特定地点使用道具挖开新路的效果
(, 下载次数: 456)

作者: blue_ku    时间: 2019-3-18 01:22
(, 下载次数: 158)

方框:实际上是长得跟方框似的主角
闪烁的点:实际上是个“原地踏步”的点状生物,迈左脚时暗,迈右脚时亮,在人物下方,确定键触发
地图是一副画:是个狠人就把整张画分割成一格格小拼图,再重新拼起来;不是狠人就找找插件
作者: yuxuan1177    时间: 2019-3-18 02:16
blue_ku 发表于 2019-3-18 01:22
方框:实际上是长得跟方框似的主角
闪烁的点:实际上是个“原地踏步”的点状生物,迈左脚时暗,迈右脚时 ...


这个我都知道,我就是在把图拆分,但是拆分之后,如何实现战争迷雾的消去很麻烦,现在想到的方法是用图片遮罩,虽然可以实现,但是需要很多图片分别遮挡,而且还要用事件拦住迷雾的地图,让主角(方框)没办法去迷雾地区
现在就是想要一个简单的视线方法
不然的话,一个地图二十多张图很麻烦,而且小地图还好,大地图的话,图片布置布局很容易乱……
作者: 白嫩白嫩的    时间: 2019-3-18 13:49
我有个思路,虽然不能完全像废都那样探索,但也许能做出个大概吧【未实验,纯属拍脑门想出来的】

灯光系统不是可以让角色周围一圈可以看见,远处看不见吗,通过事件设置事件灯光,就像路灯一样排布在地图里面,事件灯光可以设置灯光覆盖范围有多大,事件灯光之间的距离根据需要调整,然后设置角色经过“路灯”的时候,路灯自动打开,可以利用mog插件或者yep插件设定距离路灯多少格开启该路灯,这样探索地图基本上能做出来吧。

但是也有个问题,探索完地图可能会有未被灯光覆盖的边角残留
作者: tseyik    时间: 2019-3-18 17:36
本帖最后由 tseyik 于 2019-3-18 17:47 编辑

有個近似的
雖沒战争迷雾
但可以使用true,false或$ gameSwitch值啟用/禁用每個路徑
狀態窗口使用您選擇的任何變量顯示每個節點的狀態(例如,推薦級別,箱子數量等)
每個節點盡可能使用事件,節點可以動畫。(用事件1/2頁,用不同動畫就可做出你要的効果
World Map Plugin 2.00b
https://forums.rpgmakerweb.com/i ... plugin-2-00b.56133/
(, 下载次数: 390)
(, 下载次数: 392)
允許可定制的,功能齊全的世界地圖系統。每個世界地圖位置都是一個“節點”,節點之間的路徑可以鎖定/解鎖(即發生滑坡,切斷兩個城鎮之間的通道),內置箭頭支持(可以啟用/禁用自定義圖片),這可以識別未鎖定路徑和鎖定路徑(鎖​​定路徑使用禁用箭頭)。附帶可自定義的窗口顯示節點狀態。


特徵
- 靈活的世界地圖系統(節點可能只有一個瓦片,可以菊花鏈連接多個世界地圖等)


- 每個節點盡可能使用事件,節點可以動畫。


- 每個節點可以有1-4個路徑通向其他節點。


- 無需手動尋路!這一切都由Shaz的Path Finder處理。


- 狀態窗口使用您選擇的任何變量顯示每個節點的狀態(例如,推薦級別,箱子數量等)


- 如果播放器距離太近,狀態窗口將移動。玩家應該無法進入狀態窗口。


- 遊戲變量搭配以記住上一張地圖(如果用戶決定取消世界地圖)。


- 可以使用true,false或$ gameSwitch值啟用/禁用每個路徑。


- 可選箭頭按鈕組支持(熱/冷/禁用)。


- 清理腳本,因此不會進行冗餘的交換機檢查。

作者: wabcmcc    时间: 2019-3-18 22:29
Mr. Trivel:MrTS_DarkRoomCovers.js
用區域ID顯示特定區域的圖塊,或隱藏特定區域的圖塊.
[fold=MrTS_DarkRoomCovers.js]//=============================================================================
// MrTS_DarkRoomCovers.js
//=============================================================================

/*:
* @plugindesc Hides or reveals regions.
* @author Mr. Trivel
*
* @param Tile Size
* @desc How big are map tiles? X Y
* Default: 48 48
* @default 48 48
*
* @help
* --------------------------------------------------------------------------------
* Terms of Use
* --------------------------------------------------------------------------------
* Don't remove the header or claim that you wrote this plugin.
* Credit Mr. Trivel if using this plugin in your project.
* Free for commercial and non-commercial projects.
* --------------------------------------------------------------------------------
* Version 1.1
* --------------------------------------------------------------------------------
*
* --------------------------------------------------------------------------------
* Map Property Tags
* --------------------------------------------------------------------------------
*
* --------------------------------------------------------------------------------
*
* --------------------------------------------------------------------------------
* Plugin Commands
* --------------------------------------------------------------------------------
* RegionReveal [ID] - Reveals tiles of specific region
* RegionHide [ID] - Hides tiles of specific region
* RegionReset - Resets all open regions
* --------------------------------------------------------------------------------
*
* --------------------------------------------------------------------------------
* Version History
* --------------------------------------------------------------------------------
* 1.1 - Performance issues fixed, code cleanup
* 1.0 - Release
*/

(function() {
        var parameters = PluginManager.parameters('MrTS_DarkRoomCovers');
        var paramTileSize = String(parameters['Tile Size'] || "48 48").split(' ');
        var tileSizeX = Number(paramTileSize[0]);
        var tileSizeY = Number(paramTileSize[1]);

        //--------------------------------------------------------------------------
        // Game_Interpreter
        //
       
        var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
        Game_Interpreter.prototype.pluginCommand = function(command, args) {
                _Game_Interpreter_pluginCommand.call(this, command, args);
                if (command.toLowerCase() === "regionreveal") {
                        $gameMap.addToCurrentlyOpenRegions(Number(args[0]));
                } else if (command.toLowerCase() === "regionhide") {
                        $gameMap.removeFromCurrentlyOpenRegions(Number(args[0]));
                } else if (command.toLowerCase() === "regionreset") {
                        $gameMap.resetCurrentlyOpenRegions();
                }
        };

        //----------------------------------------------------------------------------
        // Game_Map
        //
       
        // currentlyOpenRegions
        Game_Map.prototype.currentlyOpenRegions = function() {
                if (!this._openRegionIds) this._openRegionIds = [0];
                return this._openRegionIds;
        };

        Game_Map.prototype.addToCurrentlyOpenRegions = function(id) {
                if (!this._openRegionIds) this._openRegionIds = [0];
                if (!this._openRegionIds.contains(id)) this._openRegionIds.push(id);
        };

        Game_Map.prototype.removeFromCurrentlyOpenRegions = function(id) {
                if (!this._openRegionIds) return;
                this._openRegionIds.splice(this._openRegionIds.indexOf(id), 1);
        };

        Game_Map.prototype.resetCurrentlyOpenRegions = function() {
                this._openRegionIds = [0];
        };

        //----------------------------------------------------------------------------
        // Scene_Map
        //

        var _SceneMap_createDisplayObjects = Scene_Map.prototype.createDisplayObjects;
        Scene_Map.prototype.createDisplayObjects = function() {
                _SceneMap_createDisplayObjects.call(this);
                this.createDarkCover();
        };

        Scene_Map.prototype.createDarkCover = function() {
                this._darkCover = new Spriteset_DarkCover();
                this._spriteset.addChild(this._darkCover);
        };

        //--------------------------------------------------------------------------
        // Spriteset_DarkCover
        //
        // Covers regions with dark dark darkness.
       
        function Spriteset_DarkCover() {
                this.initialize.apply(this, arguments);       
        };
       
        Spriteset_DarkCover.prototype = Object.create(Sprite.prototype);
        Spriteset_DarkCover.prototype.constructor = Spriteset_DarkCover;
       
        Spriteset_DarkCover.prototype.initialize = function() {
                Sprite.prototype.initialize.call(this);
                this.setFrame(0, 0, Graphics.width, Graphics.height);
                this._tone = [0, 0, 0, 0];
                this.opaque = true;
                this._darkCovers = [];
                this._displayX = 0;
                this._displayY = 0;
                this._regions = $gameMap.currentlyOpenRegions().clone();
                this.createDarkCovers();
                this.update();
        };

        Spriteset_DarkCover.prototype.createDarkCovers = function() {
                var bitmap = new Bitmap(tileSizeX, tileSizeY);
                bitmap.fillAll('#000000');
                for (var j = -1; j < Math.ceil(Graphics.boxHeight/tileSizeY)+2; j++) {
                        this._darkCovers.push([]);
                        for (var i = -1; i < Math.ceil(Graphics.boxWidth/tileSizeX)+2; i++) {
                                var cover = new Sprite(bitmap);
                                cover.x = i * tileSizeX;
                                cover.y = j * tileSizeY;
                                var regionId = $gameMap.regionId(i+this._displayX, j+this._displayY);
                                cover.visible = !(this._regions.contains(regionId));
                                this._darkCovers[j+1].push(cover);
                                this.addChild(cover);
                        }
                }
        };

        Spriteset_DarkCover.prototype.update = function() {
                Sprite.prototype.update.call(this);
                this.x = (-$gameMap.displayX() + Math.floor($gameMap.displayX())) * tileSizeX;
                this.y = (-$gameMap.displayY() + Math.floor($gameMap.displayY())) * tileSizeY;
                if (Math.floor($gameMap.displayX()) !== this._displayX ||
                        Math.floor($gameMap.displayY()) !== this._displayY ||
                        !$gameMap.currentlyOpenRegions().equals(this._regions))
                {
                        this._displayX = Math.floor($gameMap.displayX());
                        this._displayY = Math.floor($gameMap.displayY());
                        this._regions = $gameMap.currentlyOpenRegions().clone();
                        for (var j = -1; j < Math.ceil(Graphics.boxHeight/tileSizeY)+2; j++) {
                                for (var i = -1; i < Math.ceil(Graphics.boxWidth/tileSizeX)+2; i++) {
                                        var regionId = $gameMap.regionId(i+this._displayX, j+this._displayY);
                                        this._darkCovers[j+1][i+1].visible = !(this._regions.contains(regionId));
                                }
                        }
                }
        };
})();[/fold]
(, 下载次数: 171)
(, 下载次数: 182)
作者: yuxuan1177    时间: 2019-3-19 14:48
本帖最后由 yuxuan1177 于 2019-3-19 14:51 编辑
wabcmcc 发表于 2019-3-18 22:29
Mr. Trivel:MrTS_DarkRoomCovers.js
用區域ID顯示特定區域的圖塊,或隱藏特定區域的圖塊.
[fold=MrTS_DarkRo ...


比起我原来的方法简单了很多,工作量下降了,感谢。
但现在有一个问题。
那就是在地图进行切换之后,上一张地图的区域显示是保留的。
换句话说,我在第一张第一设置区域2显示的话,到了第二张地图,区域二也是亮的,有没有办法能够将地图上的区域显示独立出来呢?


补充
想到了一个解决方案,那就是把事件全部做并行处理,每一个地图设置区域全暗,然后通过开关将并行事件设置为当前地图打开,这样就可以了

作者: tseyik    时间: 2019-3-19 15:20
本帖最后由 tseyik 于 2019-3-19 15:33 编辑

マップタイルのコピー1.07
不過有人説和YEP不和
https://tm.lucky-duet.com/viewtopic.php?t=338


作者: yuxuan1177    时间: 2019-3-19 15:42
tseyik 发表于 2019-3-19 15:20
マップタイルのコピー1.07
不過有人説和YEP不和
https://tm.lucky-duet.com/viewtopic.php?t=338


那个……并不是很懂这是怎么用的……
我是用手绘背景,然后用上面的方法作为遮罩
目前正在研究区域通行的设计,实现战争迷雾地区无法进入,迷雾消失就可以进去的方法

作者: if216    时间: 2019-3-19 16:24
本帖最后由 if216 于 2019-3-19 16:28 编辑

其实可以用事件做,每一个事件格对应一个相应的图块。然后通过切换事件开关,打开或关闭。
脚本这一块涉及地图,要做地图的大佬做估计会做。。。水大佬什么的
我做过一个演示,查我帖子,里面有个地图迷雾演示。跟这个不太像。
作者: yang1zhi    时间: 2019-3-19 16:30
一个格子一个精灵
上面再脯一层精灵做雾
作者: yuxuan1177    时间: 2019-3-19 17:35
if216 发表于 2019-3-19 16:24
其实可以用事件做,每一个事件格对应一个相应的图块。然后通过切换事件开关,打开或关闭。
脚本这一块涉及 ...

我第一版就是这么做的,但是随后发现这么做超麻烦。特别是涉及到有20多个区域的迷宫的时候,分支会变得超级麻烦
作者: yuxuan1177    时间: 2019-3-20 12:41
wabcmcc 发表于 2019-3-18 22:29
Mr. Trivel:MrTS_DarkRoomCovers.js
用區域ID顯示特定區域的圖塊,或隱藏特定區域的圖塊.
[fold=MrTS_DarkRo ...

规划了一下地图,预计设计12~15个大迷宫,255个区域的话,差不多够用
不过穿墙的问题不知道如何解决,虽然有现成的一些区域限制通行的脚本,但是在游戏中变更区域的通行度的脚本还是没有办法解决,请问,有什么简单的变更通行度的脚本么?
感谢>_<
作者: tseyik    时间: 2019-3-21 08:49
本帖最后由 tseyik 于 2019-3-21 08:51 编辑

有個插件可能有用
點擊一個事件即可直接執行它
[fold=DP_DetectiveMode.js][pre lang="javascript"]//=============================================================================
// drowsepost Plugins - Detective Mode Plugin
// DP_DetectiveMode.js
// Version: 0.1
// canotun
//=============================================================================

var Imported = Imported || {};
Imported.DP_DetectiveMode = true;

//=============================================================================
/*:
* @plugindesc イベントをタップして直接実行できるようにします ver 0.1
* @author drowsepost
*
* @param Switch Number
* @desc このプラグインのオンオフを切り替えるスイッチID
* Default: 3
* @default 3
*
* @param Stop Trigger Input
* @desc 有効時ボタンデバイスによる隣接イベントの実行をストップするか
* Default: true
* @default true
*
* @param Stop Move Tap
* @desc 有効時タップ操作をストップするか
* Default: true
* @default true
*
* @param Stop Move
* @desc 有効時プレイヤーの移動をすべてキャンセルするか
* Default: false
* @default false
*
* @help
* 指定したスイッチID(Switch Number)がオンのとき、
* イベントをクリックすると移動できる出来ないに関わらず直接イベントを実行します。
* 「決定キー」をそのイベントに対して押したのと同じ振る舞いになります。
*
* ===
* このプラグインは試作品です。
* いくつかのプライベートプロパティーを参照しているため、
* 今後の本体アップデートで動作しなくなる可能性があります。
* ご利用によって生じたいかなる問題の責任も負いかねます。
* ===
*
* ライセンス: MIT
*
*/
(function() {
    "use strict";
    var parameters = PluginManager.parameters('DP_DetectiveMode');
    var user_switch = Number(parameters['Switch Number'] || 3);
   
    var user_stop = Boolean(parameters['Stop Move'] === 'true' || false);
    var user_stop_tap_move = Boolean(parameters['Stop Move Tap'] === 'true' || false);
   
    var user_stop_input = Boolean(parameters['Stop Trigger Input'] === 'true' || false);
   
    var isDirectMode = (function(){
        return $gameSwitches.value(user_switch);
    });
   
    var startEventOnMap = (function(x, y){
        /*
        指定座標のイベントを実行
        */
        var isFind = false;
        if (!$gamePlayer.canStartLocalEvents()) return;
        if ($gameMap.isEventRunning()) return;
        
        $gameMap.eventsXy(x, y).forEach(function(event) {
            console.log('find event', event);
            if (event.isTriggerIn([0])) {
                //event.isNormalPriority();←「通常キャラクターと同じ」であるかどうかを返します。
                event.start();
                isFind = true;
            }
        });
        return isFind;
    });
   
    var _Game_Player_moveByInput = Game_Player.prototype.moveByInput;
    Game_Player.prototype.moveByInput = function() {
        
        if(isDirectMode() && user_stop) return;
        _Game_Player_moveByInput.call(this);
        
    };
   
    var _Game_Player_triggerButtonAction = Game_Player.prototype.triggerButtonAction;
    Game_Player.prototype.triggerButtonAction = function() {
        
        if(isDirectMode() && user_stop_input) return false;
        return _Game_Player_triggerButtonAction.call(this);
        
    };

    var _Game_Player_triggerTouchAction = Game_Player.prototype.triggerTouchAction;
    Game_Player.prototype.triggerTouchAction = function() {
        
        if(isDirectMode() && user_stop_tap_move) return false;
        return _Game_Player_triggerTouchAction.call(this);
        
    };
   
    var _Scene_Map_processMapTouch = Scene_Map.prototype.processMapTouch;
    Scene_Map.prototype.processMapTouch = function() {
        (function(_self){
            /*
            マップがタッチされたら座標を取り出してイベント実行
            */
            if(!isDirectMode()) return;
            
            if (!TouchInput.isTriggered() && _self._touchCount <= 0) return;
            if (!TouchInput.isPressed()) return;
            if (_self._touchCount !== 0 && _self._touchCount > 5) return;
            
            var x = $gameMap.canvasToMapX(TouchInput.x);
            var y = $gameMap.canvasToMapY(TouchInput.y);
            startEventOnMap(x, y);
            
        }(this));
        
        
        if(!(isDirectMode() && user_stop_tap_move)) {
            _Scene_Map_processMapTouch.call(this);
        }
        
    };
   
}());
[/pre][/fold]
作者: wabcmcc    时间: 2019-3-21 13:09
规划了一下地图,预计设计

突然想起(口頭禪)瞎糊...通行度....
用多圖層(視差圖)插件,
上層半透明霧圖覆蓋整張圖,
再上一層,多少隱藏區域,分開用多少張圖遮蓋隱藏,
遮蓋圖層要綁定在地圖上,免玩家移動圖層跟隨移動.
通行度用區域ID插件.
作者: yuxuan1177    时间: 2019-3-22 13:32
wabcmcc 发表于 2019-3-21 13:09
突然想起(口頭禪)瞎糊...通行度....
用多圖層(視差圖)插件,
上層半透明霧圖覆蓋整張圖,

最早想过类似方案,但实现起来挺麻烦的
废都物语的RM2003能够直接替换上层和下层的地图元件,但是在RMMV里面却无法替换地图图块,虽说RMMV的确挺厉害,但这可以说是一个小小的退步吧……

作者: 在野月光族    时间: 2019-3-22 14:23
yuxuan1177 发表于 2019-3-22 13:32
最早想过类似方案,但实现起来挺麻烦的
废都物语的RM2003能够直接替换上层和下层的地图元件,但是在RMMV ...

MV也可以的。
作者: yuxuan1177    时间: 2019-3-22 15:35
在野月光族 发表于 2019-3-22 14:23
MV也可以的。

MV要换只能换一整个大的图块,单独的地图元件更换做不到,只能每一个图块单独用事件解决,而2003能批量更换地图元件,但是不需要更改整个大的图块,例如将1号元件置换为2号元件,MV是做不到的
作者: 在野月光族    时间: 2019-3-22 16:57
(, 下载次数: 106)
作者: yuxuan1177    时间: 2019-3-22 17:15
在野月光族 发表于 2019-3-22 16:57

咦,好像真可以(不是很懂脚本,但好像有点道理,勉强看懂)
但是多图层的话,通行度也能变化么?
是不是要配合多图层的脚本用?

作者: yuxuan1177    时间: 2019-3-22 23:03
在野月光族 发表于 2019-3-22 16:57

下层未探索的地图元件设置为不通行,上层已探索的地图元件设置为通行
下层地图元件用遮罩图块,上层用透明图块
地图探索之后就把下层置换成上层,是最简单的解决方案……
但在MV就没办法用事件实现,挺苦恼的
作者: yuxuan1177    时间: 2019-3-25 10:32
在野月光族 发表于 2019-3-22 16:57

尝试了一个周末都没有实现……QAQ

作者: 在野月光族    时间: 2019-3-26 00:43
类似这样的?
(, 下载次数: 101)
作者: yuxuan1177    时间: 2019-3-26 10:53
在野月光族 发表于 2019-3-26 00:43
类似这样的?

不是,黑色区域是不可过去的,而是通过事件让黑色区域主动开放其中一部分
光标只能在有地图的地方行动,黑色区域是被阻挡的,但是当触发探索事件(类似TRPG)之后,其中一部分小地图会解放,黑色区域会开放一块,然后继续探索,继续开放,直到地图探索完成

作者: yuxuan1177    时间: 2019-3-26 11:56
在野月光族 发表于 2019-3-26 00:43
类似这样的?

如图所示,一开始只有一个区域,然后触发红点的事件之后,开放第二个区域,触发绿点之后,就绪开放下一个区域
玩家的光标仅能够在白色区域活动,黑色区域是过不去的



(, 下载次数: 97)

(, 下载次数: 98)

(, 下载次数: 90)
作者: tseyik    时间: 2019-3-26 12:09
本帖最后由 tseyik 于 2019-3-26 17:06 编辑

我的方法
1:用一副圖當遠景圖(地圖)

2:用插件設定地圖通行/不通行
TMMoveEx.js移動機能拡張/TMRegionPassable.jsリージョン區域通行設定(前者簡化版,用這個就行)
https://hikimoki.sakura.ne.jp/plugin/plugin_map.html

3:用插件加上霧
CS_FogOfWar.js
https://github.com/cityshrimp/rmmv_fow

4:在通道設定事件,合条件可通行,不合条件不通行
也可用TMRegionColor.jsリージョンカラー更改區域号碼;控制通行設定
https://hikimoki.sakura.ne.jp/plugin/plugin_map.htm
(, 下载次数: 302)
(, 下载次数: 321)
(, 下载次数: 310)
(, 下载次数: 324)

CS_FogOfWar.js特征

    玩家视觉 - 玩家可以拥有视野(清除雾气)
    活动愿景 - 活动可以有远见。这些事件将被称为起源
    视觉范围 - 每个视野都有自己的视野范围。
    视觉类型 - 不同视觉形状 - 菱形,方形,圆形,方向性。每个原点都可以拥有自己的类型
    飞行视觉 - 原点可以有飞行视野(通过山脉,森林等)。
    视觉亮度 - 每个原点都有自己的视觉亮度
    地图隐藏 - 整个地图最初被涂黑,地图由原点显示
    严格对角线 - 可以配置原点是否可以看到过去两个对角放置的已阻挡的瓷砖
    目标 - 事件可以标记为目标。当它站在模糊的瓷砖上时,目标会消失
    阻止者 - 事件可以标记为阻止者。阻滞者可以阻止视力。
    RegionId的平铺类型:

    平原:总能看透
    森林:除非在山丘,山峰,了望塔或有远见的景象,否则无法透视
    希尔:除非在山上,山上,了望塔上,否则无法透视
    山/墙:除非有飞行视野,否则无法看透
    黑暗:总能看透,但永远不会透露
    被阻挡:除非有飞行视力,否则无法看透。永远不会透露。
    了望塔:总能看透。升高(可配置)

    多种配置方式:插件参数,地图/事件记事本,插件命令
作者: yuxuan1177    时间: 2019-3-28 16:05
tseyik 发表于 2019-3-26 12:09
我的方法
1:用一副圖當遠景圖(地圖)

这两天工作加班,等周五有空我尝试一下。感谢。
虽说RM在进步,但很多前代优良的特性都没有继承,挺可惜的。

作者: tseyik    时间: 2019-3-30 19:22
Galv's的MV Layer Graphics
可以實現樓主的希望
(, 下载次数: 346)
(, 下载次数: 347)
(, 下载次数: 317)




作者: 塞路休斯    时间: 2019-3-31 21:48
可以参考下拯救大魔王2,也是这个模式的,只是关于战争迷雾的描述,我不太记得这游戏有没有这个系统。
作者: yuxuan1177    时间: 2019-4-1 15:04
tseyik 发表于 2019-3-30 19:22
Galv's的MV Layer Graphics
可以實現樓主的希望

对,就是这种感觉,周末通晓加班,还没来得及做,不过顺便写了一点故事大纲2333
作者: yuxuan1177    时间: 2019-4-1 22:24
本帖最后由 yuxuan1177 于 2019-4-1 22:28 编辑
tseyik 发表于 2019-3-30 19:22
Galv's的MV Layer Graphics
可以實現樓主的希望


尝试了一下,这个插件依然是把遮罩当成是图片来处理的多图层
换句话说,一个地图就需要准备十几个遮罩图片……这种方法我最早尝试过,之前在RPGMVACE上也实现过类似的方式,但结论就是太过繁琐了……
目前看来,之前的区域涂色是最好的实现方式,区域一开始是涂黑的,然后通过脚本变成透明,只要实现涂黑区域无法通行,透明能够通行就能够解决问题了
当然,也有限制,就是这方式最多255个地图块,预定10~12个大迷宫,勉强够用
作者: yuxuan1177    时间: 2019-4-6 13:12
tseyik 发表于 2019-3-30 19:22
Galv's的MV Layer Graphics
可以實現樓主的希望

成功了!!!!!!!
方法:
利用MrTS_DarkRoomCovers.js将区域涂色成战争迷雾
利用TMRegionColor.js+TMRegionPassable.js实现功能:将区域1替换成区域2
实现过程:
在插件MrTS_DarkRoomCovers.js中,将区域1设置为不涂色,区域2设置为迷雾,这样,区域1就是透明,而区域2则是黑色
利用TMRegionColor.js+TMRegionPassable.js,设置区域1为通行状态,区域2为不通行状态,然后设置并行事件:唤出插件将区域2替换成区域1

不过有一个问题,就是区域替换之后,需要走一步黑色区域才会变化……而且每一次变化都是临时的,所以必须要设置成并行事件……
但除此之外,效果良好
插件位置:
MrTS_DarkRoomCovers.js
https://github.com/Trivel/RMMV/blob/master/MrTS_DarkRoomCovers.js
TMRegionColor.js+TMRegionPassable.js
https://hikimoki.sakura.ne.jp/plugin/plugin_map.html
作者: yuxuan1177    时间: 2019-4-6 13:31
本帖最后由 yuxuan1177 于 2019-4-6 13:39 编辑
tseyik 发表于 2019-3-30 19:22
Galv's的MV Layer Graphics
可以實現樓主的希望


实现方法2:
利用RED_SetRegionID.js实现
这个插件可以更改指定图块的区域,(X,Y,regionId),实现效果最直接,但需要一个个在地图上设置命令,小地图还好,大地图就需要一长串的指令,可以说是需要多少个图块,就需要多少个指令,当然,可以设置成区域,但也很繁琐……
而且需要走一步才能实现的问题同样……
作者: yuxuan1177    时间: 2019-4-6 13:40
wabcmcc 发表于 2019-3-18 22:29
Mr. Trivel:MrTS_DarkRoomCovers.js
用區域ID顯示特定區域的圖塊,或隱藏特定區域的圖塊.
[fold=MrTS_DarkRo ...

感谢,利用本插件已经实现了基础的功能,现在的问题是,在更改区域的时候,需要走一步才会更改,具体的情况如主楼新调整的那样
作者: yuxuan1177    时间: 2019-4-6 14:54
tseyik 发表于 2019-3-26 12:09
我的方法
1:用一副圖當遠景圖(地圖)

如主楼所示,我已经基本成功解决了
过两天有时间,做一点效果出来
作者: yuxuan1177    时间: 2019-4-20 04:44
tseyik 发表于 2019-3-30 19:22
Galv's的MV Layer Graphics
可以實現樓主的希望

刚刚尝试了之前的方法,又出了新问题,结果依然无法实现
这个效果可真难啊……
作者: yuxuan1177    时间: 2019-4-20 12:38
找到新的解决方案了,现在先这样用用看吧
作者: yuxuan1177    时间: 2019-4-20 18:28
差不多搞定了,系统框架这边没啥大问题了
现在在制作脚本中~
作者: valhalla9386    时间: 2019-4-21 04:04
唉,全事件会卡的吗
我17年只做过小小的例子还以为能行
就是用的事件的方法
可以用不规则的大图当显示的图像
开关切换后先变成步行动画逐渐消失在切换到透明图像
因为是大图,一个事件能堵一大片不规则区域

通行的问题也很好解决
放几块透明事件(优先级与人物相同)堵路
开关切换后变优先级设为在人物下方就可以通过了
作者: tseyik    时间: 2019-4-21 10:45
本帖最后由 tseyik 于 2019-4-21 10:52 编辑

我做的範例(基本不會卡)
(, 下载次数: 129)
R251可通行,R252不可通行(TMRegionPassable.js)
(, 下载次数: 1407)
背景圖+其他圖(透視0指定)MV Layer Graphics
(, 下载次数: 1394)
只用了Layer Graphics和TMRegion两個(共3個)
(, 下载次数: 1378)
指定圖C002(透視255指定)
(, 下载次数: 1388)
R252未改不能通行
(, 下载次数: 1399)
15,10由252改成25l
(, 下载次数: 1389)
(, 下载次数: 1421)
(, 下载次数: 1414)

(, 下载次数: 1392)
作者: yuxuan1177    时间: 2019-4-27 16:06
tseyik 发表于 2019-4-21 10:45
我做的範例(基本不會卡)

R251可通行,R252不可通行(TMRegionPassable.js)

这种方式是用特定的地方作为阻隔,而且需要细分地图,实际制作的话,会有些麻烦
而我要的是下图这种方式
我之前在帖子最下面更新了一下方案,感觉还不错,目前在尝试用那种方案

作者: 白嫩白嫩的    时间: 2019-4-27 20:11
感谢楼主解决问题后回来分享心得




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