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

[转载发布] 请教公共事件选择器BUG修正问题

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    2024-11-27 10:08
  • 签到天数: 108 天

    连续签到: 4 天

    [LV.6]常住居民II

    2219

    主题

    376

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    9661
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    12284

    灌水之王

    发表于 2024-2-16 17:52:51 | 显示全部楼层 |阅读模式
    如下插件:每次选择完公共事件后,并也执行了,但一直没有关闭窗口的操作及命令,最后的Onok里this.close()似乎无效,导致无限弹窗,除非按取消。求执行完公共事件后关闭窗口。
    JAVASCRIPT 代码
    1. //=============================================================================
    2. // EventSelector.js
    3. //=============================================================================
    4. /*:
    5. * @plugindesc 显示一个窗口来选择公共事件
    6. * @author Yoji Ojima
    7. *
    8. * @help 插件指令:
    9. *   EventSelector open       # 打开事件选择器
    10. *   EventSelector add 3      # 添加3号公共事件到选择器中
    11. *   EventSelector remove 4   # 从选择器中移除4号公共事件
    12. *   EventSelector clear      # 清除时间选择器
    13. */
    14. (function(){
    15.     var eventSelectorStatus = '';
    16.     var selectedCommonEvent = null;
    17.     var _Game_Interpreter_pluginCommand =
    18.             Game_Interpreter.prototype.pluginCommand;
    19.     Game_Interpreter.prototype.pluginCommand = function(command, args){
    20.         _Game_Interpreter_pluginCommand.call(this, command, args);
    21.         if(command === 'EventSelector'){
    22.             switch(args[0]){
    23.             case'open':
    24.                 eventSelectorStatus = 'open';
    25.                 this.setWaitMode('EventSelector');
    26.                 break;
    27.             case'add':
    28.                 $gameSystem.addToEventSelector(Number(args[1]));
    29.                 break;
    30.             case'remove':
    31.                 $gameSystem.removeFromEventSelector(Number(args[1]));
    32.                 break;
    33.             case'clear':
    34.                 $gameSystem.clearEventSelector();
    35.                 break;
    36.             }
    37.         }
    38.     };
    39.     var _Game_Interpreter_updateWaitMode =
    40.             Game_Interpreter.prototype.updateWaitMode;
    41.     Game_Interpreter.prototype.updateWaitMode = function(){
    42.         if(this._waitMode === 'EventSelector'){
    43.             if(eventSelectorStatus === 'close'){
    44.                 this._waitMode = '';
    45.                 if(selectedCommonEvent){
    46.                     this.setupChild(selectedCommonEvent.list);
    47.                     this._callingSelectedEvent = true;
    48.                 }
    49.                 eventSelectorStatus = '';
    50.             }
    51.             returntrue;
    52.         }else{
    53.             return _Game_Interpreter_updateWaitMode.call(this);
    54.         }
    55.     };
    56.     var _Game_Interpreter_updateChild = Game_Interpreter.prototype.updateChild;
    57.     Game_Interpreter.prototype.updateChild = function(){
    58.         var result = _Game_Interpreter_updateChild.call(this);
    59.         if(this._callingSelectedEvent && !result){
    60.             this._callingSelectedEvent = false;
    61.             eventSelectorStatus = 'open';
    62.             this.setWaitMode('EventSelector');
    63.             returntrue;
    64.         }
    65.         return result;
    66.     };
    67.     Game_System.prototype.addToEventSelector = function(commonEventId){
    68.         if(!this._eventSelectorData){
    69.             this.clearEventSelector();
    70.         }
    71.         if(!this._eventSelectorData.contains(commonEventId)){
    72.             this._eventSelectorData.push(commonEventId);
    73.         }
    74.     };
    75.     Game_System.prototype.removeFromEventSelector = function(commonEventId){
    76.         if(this._eventSelectorData){
    77.             var index = this._eventSelectorData.indexOf(commonEventId);
    78.             if(index >= 0){
    79.                 this._eventSelectorData.splice(index, 1);
    80.             }
    81.         }
    82.     };
    83.     Game_System.prototype.clearEventSelector = function(){
    84.         this._eventSelectorData = [];
    85.     };
    86.     Game_System.prototype.eventSelectorData = function(){
    87.         if(this._eventSelectorData){
    88.             returnthis._eventSelectorData.clone();
    89.         }else{
    90.             return[];
    91.         }
    92.     };
    93.     var _Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
    94.     Scene_Map.prototype.createAllWindows = function(){
    95.         _Scene_Map_createAllWindows.call(this);
    96.         this._eventSelectorWindow = new Window_EventSelector(0, 0);
    97.         this.addChild(this._eventSelectorWindow);
    98.     };
    99.     function Window_EventSelector(){
    100.         this.initialize.apply(this, arguments);
    101.     }
    102.     Window_EventSelector.prototype = Object.create(Window_Selectable.prototype);
    103.     Window_EventSelector.prototype.constructor = Window_EventSelector;
    104.     Window_EventSelector.lastTopRow = 0;
    105.     Window_EventSelector.lastIndex  = 0;
    106.     Window_EventSelector.prototype.initialize = function(x, y){
    107.         var width = Graphics.boxWidth/4;
    108.         var height = this.fittingHeight(10);
    109.         Window_Selectable.prototype.initialize.call(this, x, y, width, height);
    110.         this.openness = 0;
    111.         this.deactivate();
    112.         this.setHandler('ok',     this.onOk.bind(this));
    113.         this.setHandler('cancel', this.onCancel.bind(this));
    114.     };
    115.     Window_EventSelector.prototype.maxCols = function(){
    116.         return1;
    117.     };
    118.     Window_EventSelector.prototype.maxItems = function(){
    119.         returnthis._list ? this._list.length : 0;
    120.     };
    121.     Window_EventSelector.prototype.update = function(){
    122.         Window_Selectable.prototype.update.call(this);
    123.         switch(eventSelectorStatus){
    124.         case'open':
    125.             this.refresh();
    126.             this.setTopRow(Window_EventSelector.lastTopRow);
    127.             this.select(Window_EventSelector.lastIndex);
    128.             this.open();
    129.             this.activate();
    130.             eventSelectorStatus = 'select';
    131.             break;
    132.         case'select':
    133.             if(this.isClosed()){
    134.                 eventSelectorStatus = 'close';
    135.             }
    136.             break;
    137.         }
    138.     };
    139.     Window_EventSelector.prototype.refresh = function(){
    140.         var data = $gameSystem.eventSelectorData();
    141.         this._list = [];
    142.         for(var i = 0; i < data.length; i++){
    143.             var commonEvent = $dataCommonEvents[data[i]];
    144.             if(commonEvent){
    145.                 this._list.push(commonEvent);
    146.             }
    147.         }
    148.         this.createContents();
    149.         this.drawAllItems();
    150.     };
    151.     Window_EventSelector.prototype.drawItem = function(index){
    152.         var commonEvent = this._list[index];
    153.         var rect = this.itemRectForText(index);
    154.         this.drawText(commonEvent.name, rect.x, rect.y, rect.width);
    155.     };
    156.     Window_EventSelector.prototype.isCurrentItemEnabled = function(){
    157.         var commonEvent = this._list[this.index()];
    158.         return !!commonEvent;
    159.     };
    160.     Window_EventSelector.prototype.isOkTriggered = function(){
    161.         return Input.isTriggered('ok');
    162.     };
    163.     Window_EventSelector.prototype.onOk = function(){
    164.         selectedCommonEvent = this._list[this.index()];
    165.         Window_EventSelector.lastTopRow = this.topRow();
    166.         Window_EventSelector.lastIndex = this.index();
    167.         this.close();
    168.     };
    169.     Window_EventSelector.prototype.onCancel = function(){
    170.         selectedCommonEvent = null;
    171.         Window_EventSelector.lastTopRow = this.topRow();
    172.         Window_EventSelector.lastIndex = this.index();
    173.         this.close();
    174.     };
    175. })();
    复制代码

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

    使用道具 举报

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

    本版积分规则

    关闭

    幸运抽奖

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

    立即查看

    聊天机器人
    Loading...

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

    GMT+8, 2025-1-16 14:07 , Processed in 0.064647 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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