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

Project1

 找回密码
 注册会员
搜索

有没有能够将置换地图元件/图块的脚本或者方法?

查看数: 7404 | 评论数: 24 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-6-10 22:48

正文摘要:

我想要把第二个图块替换成第一个图块,然后第三个图块也一起替换成第一个图块,实现开图的方法 因为比较大量,所以没办法用事件来实行 这个单独的地图图块/元件替换在RPOMAKER2003之前都有,但是在MV里面似乎只 ...

回复

yuxuan1177 发表于 2020-6-12 13:09:28
moonyoulove 发表于 2020-6-12 12:22
好像不能下載只能複製到文字檔裡儲存為MULI_ReplaceTile.js
//========================================== ...

非常感谢!已经成功!
我这两天做一个DEMO看看效果
现在这正是我需要的效果,太赞了!太赞了!

点评

nice!  发表于 2020-6-12 13:20
moonyoulove 发表于 2020-6-12 12:22:35
本帖最后由 moonyoulove 于 2020-6-12 12:29 编辑

好像不能下載只能複製到文字檔裡儲存為MULI_ReplaceTile.js
JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // MULI_ReplaceTile.js
  3. //=============================================================================
  4.  
  5. /*:
  6.  * @plugindesc 替換地圖上ID為n的圖塊
  7.  * @author moonyoulove
  8.  *
  9.  * @help
  10.  * 有一個新的全域變量:$gameReplacedTiles,遊戲存檔裡會保存替換的狀態
  11.  *
  12.  * 插件命令:
  13.  * ReplaceTile Replace z tileId1 tileId2 //將z層的圖塊1都換成圖塊2
  14.  * ReplaceTile Restore z tileId //將z層的圖塊1還原成原本的數據
  15.  * ReplaceTile Clear All //將所有地圖的替換都還原
  16.  * ReplaceTile Clear Map //將當前地圖的替換都還原
  17.  * ReplaceTile Refresh //立即刷新圖塊更變
  18.  *
  19.  * Z coordinate:
  20.  * 0 : Lower tiles
  21.  * 1 : Lower characters
  22.  * 3 : Normal characters
  23.  * 4 : Upper tiles
  24.  * 5 : Upper characters
  25.  * 6 : Airship shadow
  26.  * 7 : Balloon
  27.  * 8 : Animation
  28.  * 9 : Destination
  29.  */
  30.  
  31. function RpcTile() {
  32.     throw new Error('This is a static class');
  33. }
  34.  
  35. RpcTile.parameters = PluginManager.parameters("MULI_ReplaceTile");
  36. RpcTile.hasPlugin = {
  37.     // "SomePlugin": PluginManager._scripts.includes("SomePlugin")
  38. };
  39. RpcTile.globalThis = self || window || global;
  40.  
  41. function Game_ReplacedTiles() {
  42.     this.initialize.apply(this, arguments);
  43. }
  44.  
  45. Game_ReplacedTiles.prototype.initialize = function() {
  46.     this.clear();
  47.     this._needRepaint = false;
  48. };
  49.  
  50. Game_ReplacedTiles.prototype.clear = function(mapId) {
  51.     if (mapId > 0) {
  52.         delete this._data[mapId];
  53.     } else {
  54.         this._data = {};
  55.     }
  56. };
  57.  
  58. Game_ReplacedTiles.prototype.replace = function(mapId, z, tileId1, tileId2) {
  59.     this._data[mapId] = this._data[mapId] || {};
  60.     this._data[mapId][z] = this._data[mapId][z] || {};
  61.     this._data[mapId][z][tileId1] = tileId2;
  62. };
  63.  
  64. Game_ReplacedTiles.prototype.restore = function(mapId, z, tileId) {
  65.     if (this._data[mapId] && this._data[mapId][z]) {
  66.         delete this._data[mapId][z][tileId];
  67.         if (Object.keys(this._data[mapId][z]).length === 0) {
  68.             delete this._data[mapId][z];
  69.             if (Object.keys(this._data[mapId]).length === 0) {
  70.                 delete this._data[mapId];
  71.             }
  72.         }
  73.     }
  74. };
  75.  
  76. Game_ReplacedTiles.prototype.value = function(mapId, z, tileId) {
  77.     if (this._data[mapId] && this._data[mapId][z] && this._data[mapId][z][tileId]) {
  78.         return this._data[mapId][z][tileId];
  79.     }
  80.     return 0;
  81. };
  82.  
  83. Game_ReplacedTiles.prototype.isNeedRepaint = function() {
  84.     return this._needRepaint;
  85. };
  86.  
  87. Game_ReplacedTiles.prototype.needRepaint = function() {
  88.     this._needRepaint = true;
  89. };
  90.  
  91. Game_ReplacedTiles.prototype.repainted = function() {
  92.     this._needRepaint = false;
  93. };
  94.  
  95. (function() {
  96.     let _DataManager_createGameObjects = DataManager.createGameObjects;
  97.     DataManager.createGameObjects = function() {
  98.         _DataManager_createGameObjects.call(this);
  99.         $gameReplacedTiles = new Game_ReplacedTiles();
  100.     };
  101.  
  102.     let _DataManager_makeSaveContents = DataManager.makeSaveContents;
  103.     DataManager.makeSaveContents = function() {
  104.         let contents = _DataManager_makeSaveContents.call(this);
  105.         contents.replacedTiles = $gameReplacedTiles;
  106.         return contents;
  107.     };
  108.  
  109.     let _DataManager_extractSaveContents = DataManager.extractSaveContents;
  110.     DataManager.extractSaveContents = function(contents) {
  111.         _DataManager_extractSaveContents.call(this, contents);
  112.         $gameReplacedTiles = contents.replacedTiles || $gameReplacedTiles;
  113.     };
  114.  
  115.     _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  116.     Game_Interpreter.prototype.pluginCommand = function(command, args) {
  117.         _Game_Interpreter_pluginCommand.call(this, command, args);
  118.         if (command === "ReplaceTile") {
  119.             switch (args[0]) {
  120.                 case "Replace": {
  121.                     let z = Number(args[1]);
  122.                     let tileId1 = Number(args[2]);
  123.                     let tileId2 = Number(args[3]);
  124.                     if (z >= 0 && tileId1 > 0 && tileId2 > 0) {
  125.                         $gameReplacedTiles.replace(this._mapId, z, tileId1, tileId2);
  126.                     }
  127.                     break;
  128.                 }
  129.                 case "Restore": {
  130.                     let z = Number(args[1]);
  131.                     let tileId = Number(args[2]);
  132.                     if (z >= 0 && tileId > 0) {
  133.                         $gameReplacedTiles.restore(this._mapId, z, tileId);
  134.                     }
  135.                     break;
  136.                 }
  137.                 case "Clear": {
  138.                     if (args[1] === "All") {
  139.                         $gameReplacedTiles.clear();
  140.                     } else if (args[1] === "Map") {
  141.                         $gameReplacedTiles.clear(this._mapId);
  142.                     }
  143.                     break;
  144.                 }
  145.                 case "Refresh": {
  146.                     $gameReplacedTiles.needRepaint();
  147.                     break;
  148.                 }
  149.             }
  150.         }
  151.     };
  152.  
  153.     let _Game_Map_tileId = Game_Map.prototype.tileId;
  154.     Game_Map.prototype.tileId = function(x, y, z) {
  155.         let tileId = _Game_Map_tileId.call(this, x, y, z);
  156.         if (tileId > 0) {
  157.             let replacedId = $gameReplacedTiles.value(this._mapId, z, tileId);
  158.             if (replacedId > 0) {
  159.                 return replacedId;
  160.             }
  161.         }
  162.         return tileId;
  163.     };
  164.  
  165.     let _Tilemap__readMapData = Tilemap.prototype._readMapData;
  166.     Tilemap.prototype._readMapData = function(x, y, z) {
  167.         let tileId = _Tilemap__readMapData.call(this, x, y, z);
  168.         if (tileId > 0) {
  169.             let replacedId = $gameReplacedTiles.value($gameMap.mapId(), z, tileId);
  170.             if (replacedId > 0) {
  171.                 return replacedId;
  172.             }
  173.         }
  174.         return tileId;
  175.     };
  176.  
  177.     let _Spriteset_Map_updateTilemap = Spriteset_Map.prototype.updateTilemap;
  178.     Spriteset_Map.prototype.updateTilemap = function() {
  179.         _Spriteset_Map_updateTilemap.call(this);
  180.         if ($gameReplacedTiles.isNeedRepaint()) {
  181.             this._tilemap.refresh();
  182.             $gameReplacedTiles.repainted();
  183.         }
  184.     };
  185. })();

评分

参与人数 1+1 收起 理由
yuxuan1177 + 1 非常感谢!

查看全部评分

yuxuan1177 发表于 2020-6-12 02:53:37
tseyik 发表于 2020-6-11 22:56
https://forums.rpgmakerweb.com/index.php?threads/tile-changer-copy-tiles-and-change-tiles.90437/

Ti ...

Tile Changer 我现在正在用
但这个插件有一个问题在于只能一个坐标一个坐标的更换,不能直接把1537号的地图瓦块换成1536号的瓦块
tseyik 发表于 2020-6-11 22:56:31
本帖最后由 tseyik 于 2020-6-11 23:03 编辑

https://forums.rpgmakerweb.com/i ... change-tiles.90437/

Tile Changer (Copy Tiles and Change Tiles)



https://forums.rpgmakerweb.com/i ... tile-swapping.9396/
Easy tile swapping
yuxuan1177 发表于 2020-6-11 22:08:55

是不是把上面那段代码调整一下就可以了?
我去试试看
yuxuan1177 发表于 2020-6-11 21:12:16

大神,请问这个功能是用什么插件或者代码实现的……?
现在在做一个废都物语类别的游戏,就需要用这个方式替换遮挡的图块来进行开图,以前有过各种方法,但都有缺陷,也就是替换图块是最好的,但一直都实现不了,现在只有一个一格格替换的超慢方法……
yuxuan1177 发表于 2020-6-11 20:59:46

啊啊啊啊,这个功能是咋实现的?
就是这个!就是这个哒!
moonyoulove 发表于 2020-6-11 20:22:00
Zeldashu 发表于 2020-6-11 20:10:51
yuxuan1177 发表于 2020-6-11 18:11
不知道MZ的新特性是不是支持
听说有分层地图,如果能够实现双层地图,将第二层下降之类的,应该会简单很 ...

MZ现在还没有确切的情报公布。只是知道多了一个“层”功能,还不知道具体是应用在哪里的。
另外内存要求8G,不支持window7也挺奇怪的……
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-12-4 17:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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