查看: 6246|回复: 11

[交流讨论] 【rmmv】弱弱的问句,怎么实现桥的效果

[复制链接]
梦石
0
星屑
818
在线时间
112 小时
注册时间
2016-8-4
回帖
35
发表于 2017-3-24 19:34:30 | 显示全部楼层 |阅读模式

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

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

×
我想在一张地图上画一座桥,但是要求角色在桥上能够通过,也能够在桥下穿行,就像下图这样:

桥

桥

但无论怎么设置地图的通过规则,似乎都很难实现这一效果,所以请教大神是怎么解决的?
梦石
0
星屑
342
在线时间
377 小时
注册时间
2013-1-30
回帖
162
发表于 2017-3-24 19:52:38 | 显示全部楼层
准备两套素材一样但通行性设置的不一样的地图组,一套里面桥是从底下穿过的,一套里面桥是从上面走的。平时用从底下穿的那套地图组,但当人物走到桥的两端时(设置接触型事件),事件指令第三页地图栏更改图块组,在玩家不知情的时候,本地图的图块组换成了从桥上走的那套图块组,人物也可以从桥上走过了。(记得走完桥后把图块组再切回来,分歧方法可以用人物朝向来分歧)

点评

谢谢大神,是个好方法。但是有没有插件什么的,我图块组不够用啊  发表于 2017-3-24 20:20
回复

使用道具 举报

梦石
0
星屑
342
在线时间
377 小时
注册时间
2013-1-30
回帖
162
发表于 2017-3-24 20:51:34 | 显示全部楼层
图块组更改最大值后可以有999套呢……

点评

明白了,我是农民……  发表于 2017-3-24 21:05
回复

使用道具 举报

梦石
0
星屑
15346
在线时间
2995 小时
注册时间
2008-11-23
回帖
2551

开拓者贵宾

发表于 2017-3-24 21:30:54 | 显示全部楼层
这个问题古已有之,搜索关键词是“四方向桥”
I'm the bone of my Second Grade.
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2017-3-24 21:56:44 | 显示全部楼层
官方挿件
OverpassTile
Bug修正
AndrewX_OverpassTileFix
canvas.png
CSD-B3wU8AAmwY6.png
CSD-B5hUsAEwYwz.png

点评

MV最初送的  发表于 2017-3-24 22:43
有没有下载地址,没找到插件  发表于 2017-3-24 22:15
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2017-3-24 22:45:59 | 显示全部楼层
OverpassTile.js[pre lang="javascript"]//=============================================================================
// OverpassTile.js
//=============================================================================

/*:
* @plugindesc 設置角色可以在橋樑下通過。
* @author Yoji Ojima
*
* @param 上層(交差地域) 區域 ID
* @desc The region ID for "overpass" such as bridges.
* @default 255
*
* @param 上層起點 區域 ID
* @desc The region ID for "gateway" such as bridge ends.
* @default 254
*
* @help
*
*插件使用區域ID來判断地板高度.
* 默認情況下,設置255橋;254爲橋的两端.
*圖塊需要設成四方通行
* Note: 注:插件不支持角色在不同的樓層的碰撞判定修改.
*/

/*:ja
* @plugindesc キャラクターが下をくぐり抜けられる橋の設定です。
* @author Yoji Ojima
*
* @param Overpass Region ID
* @desc 橋などの立体交差部分に設定するリージョンIDです。
* @default 255
*面
* @param Gateway Region ID
* @desc 橋の両端など、立体交差の入り口部分に設定するリージョンIDです。
* @default 254
*
* @help
*
* このプラグインは、床の高さを決定するのにリージョンIDを使用します。
* デフォルトでは橋の部分に255、その両端に254を設定してください。
*
* 注意:このプラグインは、異なる階層にいるキャラクター間の衝突判定修正は
*       サポートしていません。
*/

(function() {

    var parameters = PluginManager.parameters('OverpassTile');
    var overpassRegionId = Number(parameters['Overpass Region ID'] || 255);
    var gatewayRegionId = Number(parameters['Gateway Region ID'] || 254);

    var _Tilemap_isOverpassPosition = Tilemap.prototype._isOverpassPosition;
    Tilemap.prototype._isOverpassPosition = function(mx, my) {
        var regionId = this._readMapData(mx, my, 5);
        if (regionId === overpassRegionId) {
            return true;
        } else {
            return _Tilemap_isOverpassPosition.call(this, mx, my);
        }
    };

    var _Game_CharacterBase_screenZ = Game_CharacterBase.prototype.screenZ;
    Game_CharacterBase.prototype.screenZ = function() {
        if (this._higherLevel) {
            return 5;
        } else {
            return _Game_CharacterBase_screenZ.call(this);
        }
    };

    var _Game_CharacterBase_isMapPassable =
            Game_CharacterBase.prototype.isMapPassable;
    Game_CharacterBase.prototype.isMapPassable = function(x, y, d) {
        if (_Game_CharacterBase_isMapPassable.call(this, x, y, d)) {
            var x2 = $gameMap.roundXWithDirection(x, d);
            var y2 = $gameMap.roundYWithDirection(y, d);
            var d2 = this.reverseDir(d);
            var regionId1 = $gameMap.regionId(x, y);
            var regionId2 = $gameMap.regionId(x2, y2);
            if (this._higherLevel && regionId1 !== gatewayRegionId) {
                return (regionId2 === gatewayRegionId ||
                        regionId2 === overpassRegionId);
            }
            if (!this._higherLevel && regionId1 === overpassRegionId) {
                if (regionId2 === overpassRegionId) {
                    var bit1 = (1 << (d / 2 - 1)) & 0x0f;
                    var bit2 = (1 << (d2 / 2 - 1)) & 0x0f;
                    var flags = $gameMap.tilesetFlags();
                    var tileId1 = $gameMap.tileId(x, y, 0);
                    var tileId2 = $gameMap.tileId(x, y, 1);
                    var tileId3 = $gameMap.tileId(x2, y2, 0);
                    var tileId4 = $gameMap.tileId(x2, y2, 1);
                    if ((flags[tileId1] | flags[tileId2]) & bit1) {
                        return false;
                    }
                    if ((flags[tileId3] | flags[tileId4]) & bit2) {
                        return false;
                    }
                }
                return regionId2 !== gatewayRegionId;
            }
            return true;
        } else {
            return false;
        }
    };

    var _Game_CharacterBase_refreshBushDepth =
            Game_CharacterBase.prototype.refreshBushDepth;
    Game_CharacterBase.prototype.refreshBushDepth = function() {
        _Game_CharacterBase_refreshBushDepth.call(this);
        var regionId = this.regionId();
        if (regionId === gatewayRegionId) {
            this._higherLevel = true;
        } else if (regionId !== overpassRegionId) {
            this._higherLevel = false;
        }
    };

})();
[/pre]

点评

AndrewX_OverpassTileFix在66找  发表于 2017-3-24 22:47
回复

使用道具 举报

梦石
1
星屑
7574
在线时间
2650 小时
注册时间
2013-8-23
回帖
2152

开拓者

发表于 2017-3-24 23:40:11 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部