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

Project1

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

[有事请教] rmmv如何在地图上修改瓦片透明度[已解决]

[复制链接]

Lv1.梦旅人

梦石
0
星屑
76
在线时间
3 小时
注册时间
2025-6-14
帖子
5
跳转到指定楼层
1
发表于 3 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 codePlayerD 于 2025-7-23 15:00 编辑

我想修改指定坐标瓦片地图的透明度,比如地图坐标(8,8)的瓦片透明度,目前试过了两种方法。
##第一种:用替换瓦片图片的方法实现。
但我想要的是通过代码直接修改透明度,这样就可以便捷很多(且不用修改素材,毕竟码区难民不会弄素材)。
##第二种修改玩家透明度来伪实现,但是问题巨大。
现在想通过实时绘制来修改,
但我发现修改Tilemap和ShaderTilemap都不生效,有点没有思路了,有木有巨佬捞一下
会写脚本和简单插件,但这个效果试了几天还是没写出来


已解决,感谢巨佬的思路,以下是根据思路制作的插件,伪半透明墙体插件
JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // OYS_gamePlayerOpacity.js
  3. //=============================================================================
  4. /*:
  5. * @plugindesc 实现伪墙体半透明插件
  6. * @author OYS_codePlayerD(缘系列)
  7. * @version 1.0.1
  8. *
  9. * @param opacity
  10. * @text 设置伪半透明精灵的值
  11. * @desc 设置透明度
  12. * @type number
  13. * @min 0
  14. * @max 255
  15. * @default 100
  16. *
  17. * @param enableSwitch
  18. * @text 启用开关
  19. * @desc 控制伪墙体半透明开关
  20. * @type Boolean
  21. * @default true
  22. *
  23. * @help 遇到上方图层半透明功能说明
  24. * 1-这个插件会创建一个与玩家角色外观相同的精灵,
  25. * 2-通过调整不同的透明度和层级,始终显示在玩家上方。
  26. * 可以通过插件参数调整透明度。
  27. *
  28. * 关于性能优化:
  29. *  1-没有经过兼容测试,单独使用应该没有问题
  30. */
  31.  
  32. (function () {
  33.     var parameters = PluginManager.parameters('OYS_gamePlayerOpacity');
  34.     var opacity = Number(parameters['opacity'] || 125);
  35.     var enableSwitch = parameters['enableSwitch']||true;
  36.  
  37.     var _Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
  38.     Scene_Map.prototype.createAllWindows = function () {
  39.         _Scene_Map_createAllWindows.call(this);
  40.         this.createCopyPlayerSprite();
  41.     };
  42.     // 复制玩家精灵
  43.     Scene_Map.prototype.createCopyPlayerSprite = function () {
  44.         if (!this._copySprite) {
  45.             this._copySprite = new Sprite_Character($gamePlayer);
  46.             this.addChild(this._copySprite);
  47.         } else {
  48.             this._copySprite.setCharacter($gamePlayer);
  49.         }
  50.     };
  51.  
  52.     // 通过帧更新复制精灵数据
  53.     var _Scene_Map_update = Scene_Map.prototype.update;
  54.     Scene_Map.prototype.update = function () {
  55.         _Scene_Map_update.call(this);
  56.         if (this._copySprite && $gamePlayer) {
  57.             if (enableSwitch) {
  58.                 //用这种方法减少重复绘制
  59.                 if (!this.OYscondition) {
  60.                     console.log("只设置一次的参数")
  61.                     this._copySprite.visible = true;
  62.                     this._copySprite.opacity = opacity;
  63.                     this._copySprite.z = $gamePlayer.screenZ() + 1;
  64.                     // 重写opacity属性,确保始终返回目标
  65.                     Object.defineProperty(this._copySprite, 'opacity', {
  66.                         get: function () {
  67.                             return opacity; // 仅针对this._copySprite的 固定透明度
  68.                         },
  69.                         set: function (value) { }// 忽略任何修改
  70.                     });
  71.                     this.OYscondition = true;
  72.                 }
  73.                 this._copySprite.x = $gamePlayer.screenX();
  74.                 this._copySprite.y = $gamePlayer.screenY();
  75.             } else {
  76.                 if (!this.OYsconditionF) {//只会刷新一次,减少重复绘制
  77.                     this._copySprite.visible = false;
  78.                     this.OYsconditionF = true;
  79.                 }
  80.             }
  81.  
  82.         }
  83.     };
  84.     // 图像同步
  85.     var _Game_Player_setCharacterImage = Game_Player.prototype.setCharacterImage;
  86.     Game_Player.prototype.setCharacterImage = function (characterName, characterIndex) {
  87.         _Game_Player_setCharacterImage.call(this, characterName, characterIndex);
  88.         // 安全检查场景和精灵是否存在
  89.         if (SceneManager._scene instanceof Scene_Map && SceneManager._scene._copySprite) {
  90.             SceneManager._scene._copySprite.setCharacter(this);
  91.         }
  92.     };
  93.     // 切图重建
  94.     var _Scene_Map_onMapLoaded = Scene_Map.prototype.onMapLoaded;
  95.     Scene_Map.prototype.onMapLoaded = function () {
  96.         _Scene_Map_onMapLoaded.call(this);
  97.         this.createCopyPlayerSprite();
  98.     };
  99.     // 场景销毁时清理,防止内存泄漏
  100.     var _Scene_Map_terminate = Scene_Map.prototype.terminate;
  101.     Scene_Map.prototype.terminate = function () {
  102.         _Scene_Map_terminate.call(this);
  103.          this.OYscondition = false; // 场景销毁时重置标记
  104.         if (this._copySprite) {
  105.             this.removeChild(this._copySprite);
  106.             this._copySprite = null;
  107.         }
  108.     };
  109.     // 玩家重置时同步更新
  110.     var _Game_Player_performTransfer = Game_Player.prototype.performTransfer;
  111.     Game_Player.prototype.performTransfer = function () {
  112.         _Game_Player_performTransfer.call(this);
  113.         if (SceneManager._scene instanceof Scene_Map && SceneManager._scene._copySprite) {
  114.             SceneManager._scene.createCopyPlayerSprite();
  115.         }
  116.     };
  117.  
  118. })();

Lv5.捕梦者

梦石
0
星屑
39922
在线时间
5799 小时
注册时间
2006-11-10
帖子
6676
2
发表于 3 天前 | 只看该作者
如果你只是想"角色被遮挡时显示半透明效果",  那第二种更方便, 但不是修改行走图透明度, 而是给行走图再叠上一层, 在第二层设置半透明和最上方显示


然后你说的"问题巨大" 是什么问题?
回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
3 小时
注册时间
2025-6-14
帖子
5
3
 楼主| 发表于 3 天前 | 只看该作者
灯笼菜刀王 发表于 2025-7-23 09:56
如果你只是想"角色被遮挡时显示半透明效果",  那第二种更方便, 但不是修改行走图透明度, 而是给行走图再叠 ...

当玩不被屋顶一类图块完全挡住露出个小脑瓜子时,头是透明的

点评

你自己看我发的GIF  发表于 3 天前
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
3 小时
注册时间
2025-6-14
帖子
5
4
 楼主| 发表于 3 天前 | 只看该作者
灯笼菜刀王 发表于 2025-7-23 09:56
如果你只是想"角色被遮挡时显示半透明效果",  那第二种更方便, 但不是修改行走图透明度, 而是给行走图再叠 ...

嗷嗷,我发现了,你的方法比我多了一个步骤,再弄一个玩家,第二个玩家变成半透明,并且置于目标图块上方,
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-26 00:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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