扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 56|回复: 0

[转载发布] 设置玩家透明度实现伪墙体透明

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    2025-7-8 01:43
  • 签到天数: 157 天

    连续签到: 2 天

    [LV.7]常住居民III

    2448

    主题

    498

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    13119
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    16093

    灌水之王

    发表于 昨天 15:32 | 显示全部楼层 |阅读模式
    感谢巨佬的思路,有思路很快就解决了 ,新人插件,一切都是缘
    插件很简单,只要配置参数就行了,只能给玩家使用,事件的话,感觉又得换一种思路
    因为要实现ARPG战斗,所以boss事件和精英怪事件中的行走图都非常大,出现上层图层时且类似城市场景时,会出现墙体一部分遮挡住事件,另一部分却被事件遮挡。。。。。
    如果使用插件的思路虽然也可以使用这个插件的思路去实现,但是怪物多了德华可能比较卡顿,顺便看看有没有其他思路
    抛砖引玉ing
    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. (function(){
    32.     var parameters = PluginManager.parameters('OYS_gamePlayerOpacity');
    33.     var opacity = Number(parameters['opacity'] || 125);
    34.     var enableSwitch = parameters['enableSwitch']||true;
    35.     var _Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
    36.     Scene_Map.prototype.createAllWindows = function(){
    37.         _Scene_Map_createAllWindows.call(this);
    38.         this.createCopyPlayerSprite();
    39.     };
    40.     // 复制玩家精灵
    41.     Scene_Map.prototype.createCopyPlayerSprite = function(){
    42.         if(!this._copySprite){
    43.             this._copySprite = new Sprite_Character($gamePlayer);
    44.             this.addChild(this._copySprite);
    45.         }else{
    46.             this._copySprite.setCharacter($gamePlayer);
    47.         }
    48.     };
    49.     // 通过帧更新复制精灵数据
    50.     var _Scene_Map_update = Scene_Map.prototype.update;
    51.     Scene_Map.prototype.update = function(){
    52.         _Scene_Map_update.call(this);
    53.         if(this._copySprite && $gamePlayer){
    54.             if(enableSwitch){
    55.                 //用这种方法减少重复绘制
    56.                 if(!this.OYscondition){
    57.                     console.log("只设置一次的参数")
    58.                     this._copySprite.visible = true;
    59.                     this._copySprite.opacity = opacity;
    60.                     this._copySprite.z = $gamePlayer.screenZ() + 1;
    61.                     // 重写opacity属性,确保始终返回目标
    62.                     Object.defineProperty(this._copySprite, 'opacity', {
    63.                         get: function(){
    64.                             return opacity; // 仅针对this._copySprite的 固定透明度
    65.                         },
    66.                         set: function(value){}// 忽略任何修改
    67.                     });
    68.                     this.OYscondition = true;
    69.                 }
    70.                 this._copySprite.x = $gamePlayer.screenX();
    71.                 this._copySprite.y = $gamePlayer.screenY();
    72.             }else{
    73.                 if(!this.OYsconditionF){//只会刷新一次,减少重复绘制
    74.                     this._copySprite.visible = false;
    75.                     this.OYsconditionF = true;
    76.                 }
    77.             }
    78.         }
    79.     };
    80.     // 图像同步
    81.     var _Game_Player_setCharacterImage = Game_Player.prototype.setCharacterImage;
    82.     Game_Player.prototype.setCharacterImage = function(characterName, characterIndex){
    83.         _Game_Player_setCharacterImage.call(this, characterName, characterIndex);
    84.         // 安全检查场景和精灵是否存在
    85.         if(SceneManager._scene instanceof Scene_Map && SceneManager._scene._copySprite){
    86.             SceneManager._scene._copySprite.setCharacter(this);
    87.         }
    88.     };
    89.     // 切图重建
    90.     var _Scene_Map_onMapLoaded = Scene_Map.prototype.onMapLoaded;
    91.     Scene_Map.prototype.onMapLoaded = function(){
    92.         _Scene_Map_onMapLoaded.call(this);
    93.         this.createCopyPlayerSprite();
    94.     };
    95.     // 场景销毁时清理,防止内存泄漏
    96.     var _Scene_Map_terminate = Scene_Map.prototype.terminate;
    97.     Scene_Map.prototype.terminate = function(){
    98.         _Scene_Map_terminate.call(this);
    99.          this.OYscondition = false; // 场景销毁时重置标记
    100.         if(this._copySprite){
    101.             this.removeChild(this._copySprite);
    102.             this._copySprite = null;
    103.         }
    104.     };
    105.     // 玩家重置时同步更新
    106.     var _Game_Player_performTransfer = Game_Player.prototype.performTransfer;
    107.     Game_Player.prototype.performTransfer = function(){
    108.         _Game_Player_performTransfer.call(this);
    109.         if(SceneManager._scene instanceof Scene_Map && SceneManager._scene._copySprite){
    110.             SceneManager._scene.createCopyPlayerSprite();
    111.         }
    112.     };
    113. })();
    复制代码

                本帖来自P1论坛作者codePlayerD,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=497768  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-7-24 07:12 , Processed in 0.111944 second(s), 58 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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