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

Project1

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

[已经解决] 请教在当前界面有显示文章对话框出现的if写法

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
跳转到指定楼层
1
发表于 2021-9-1 15:49:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 taeckle 于 2021-9-1 16:23 编辑

我想做一个if,具体情况是这样的:

如果在某个Scene_XXX场景中(比如Scene_Battle)的当前界面有显示文章对话框(就是地图事件里的插入->事件指令->显示文章做出来的东西)出现的话, 则C键(enter或者space)无效。


想了半天也不知道怎么弄,还请大家指点一二,感激不尽!

Lv5.捕梦者

梦石
0
星屑
36432
在线时间
10798 小时
注册时间
2009-3-15
帖子
4814
2
发表于 2021-9-1 16:35:23 | 只看该作者
不懂..确定键无效做什么用?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
3
 楼主| 发表于 2021-9-1 16:38:02 | 只看该作者
soulsaga 发表于 2021-9-1 16:35
不懂..确定键无效做什么用?


好吧,我们换一个结果:

如果在某个Scene_XXX场景中(比如Scene_Battle)的当前界面只要有显示文章对话框(就是地图事件里的插入->事件指令->显示文章做出来的东西)出现的话, 则自动播放名为ABC的bgm。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36432
在线时间
10798 小时
注册时间
2009-3-15
帖子
4814
4
发表于 2021-9-1 17:06:50 | 只看该作者
本帖最后由 soulsaga 于 2021-9-1 18:17 编辑
taeckle 发表于 2021-9-1 16:38
好吧,我们换一个结果:

如果在某个Scene_XXX场景中(比如Scene_Battle)的当前界面只要有显示文章对话框( ...


RUBY 代码复制
  1. class << Input
  2.   alias scene_trigger? trigger?
  3.   def trigger?(key=0)
  4.     if $scene.is_a?(Scene_Battle)
  5.       a=$scene.instance_variable_get("@message_window")
  6.     return false if a and key==Input::C and a and a.visible
  7.     end
  8.     scene_trigger?(key)
  9.   end
  10. end


这杽可以吗

点评

哈,太好了,我待会去试试!  发表于 2021-9-1 18:19
战斗中不能按确定脚本已更新..  发表于 2021-9-1 18:18
告诉一下你的战斗快捷键写在哪里..  发表于 2021-9-1 18:16
对话框才对  发表于 2021-9-1 18:15
那你判断战斗场景的视频可不看见咯..  发表于 2021-9-1 18:14

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
taeckle + 1 胜利在望!

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
5
 楼主| 发表于 2021-9-1 18:50:56 | 只看该作者
本帖最后由 taeckle 于 2021-9-1 18:57 编辑


大神请问下你上面代码里的这句class << Input咋没有个class名字啊?那个<<还是表示继承的意思嘛?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36432
在线时间
10798 小时
注册时间
2009-3-15
帖子
4814
6
发表于 2021-9-1 18:57:48 | 只看该作者
taeckle 发表于 2021-9-1 18:50
大神请问下你上面代码里的这句class

这个是我问其他大神知道的..

ruby 中的 class << obj 是操作 obj 的单例类,也就是说,你可以用这个方式给任何对象定义它特有的行为

点评

这个知识点哪里有教程啊?我有空的话也来瞅一眼  发表于 2021-9-1 20:20
这个跟继承是类似的..  发表于 2021-9-1 19:24
我啥水平你又不是不知道,咱还是玩简单点吧,我在下面把我设置快捷键的代码写出来,你帮咱怎么把你上面的代码加进去就行了。。。  发表于 2021-9-1 19:12
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
7
 楼主| 发表于 2021-9-1 19:18:42 | 只看该作者
本帖最后由 taeckle 于 2021-9-1 19:21 编辑
soulsaga 发表于 2021-9-1 18:57
这个是我问其他大神知道的..

ruby 中的 class


大神这是我在Scene_battle_1的def update写的快捷键F9设置(第221行至223行),现在的问题是一旦出现显示文章的对话框再按这个快捷键会出bug,所以咱想让出现显示文章的对话框时这个快捷键F9没有效果:

  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 1)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================

  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 初始化战斗用的各种暂时数据
  12.     $game_temp.in_battle = true
  13.     $game_temp.battle_turn = 0
  14.     $game_temp.battle_event_flags.clear
  15.     $game_temp.battle_abort = false
  16.     $game_temp.battle_main_phase = false
  17.     $game_temp.battleback_name = $game_map.battleback_name
  18.     $game_temp.forcing_battler = nil
  19.     # 初始化战斗用事件解释器
  20.     $game_system.battle_interpreter.setup(nil, 0)
  21.     # 准备队伍
  22.     @troop_id = $game_temp.battle_troop_id
  23.     $game_troop.setup(@troop_id)
  24.     # 生成角色命令窗口
  25.     s1 = $data_system.words.attack
  26.     s2 = $data_system.words.skill
  27.     s3 = $data_system.words.guard
  28.     s4 = $data_system.words.item
  29.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
  30.     @actor_command_window.y = 160
  31.     @actor_command_window.back_opacity = 160
  32.     @actor_command_window.active = false
  33.     @actor_command_window.visible = false
  34.     # 生成其它窗口
  35.     @party_command_window = Window_PartyCommand.new
  36.     @help_window = Window_Help.new
  37.     @help_window.back_opacity = 160
  38.     @help_window.visible = false
  39.     @status_window = Window_BattleStatus.new
  40.     @message_window = Window_Message.new
  41.     # 生成活动块
  42.     @spriteset = Spriteset_Battle.new
  43.     # 初始化等待计数
  44.     @wait_count = 0
  45.     # 执行过渡
  46.     if $data_system.battle_transition == ""
  47.       Graphics.transition(20)
  48.     else
  49.       Graphics.transition(40, "Graphics/Transitions/" +
  50.         $data_system.battle_transition)
  51.     end
  52.     # 开始自由战斗回合
  53.     start_phase1
  54.     # 主循环
  55.     loop do
  56.       # 刷新游戏画面
  57.       Graphics.update
  58.       # 刷新输入信息
  59.       Input.update
  60.       # 刷新画面
  61.       update
  62.       # 如果画面切换的话就中断循环
  63.       if $scene != self
  64.         break
  65.       end
  66.     end
  67.     # 刷新地图
  68.     $game_map.refresh
  69.     # 准备过渡
  70.     Graphics.freeze
  71.     # 释放窗口
  72.     @actor_command_window.dispose
  73.     @party_command_window.dispose
  74.     @help_window.dispose
  75.     @status_window.dispose
  76.     @message_window.dispose
  77.     if @skill_window != nil
  78.       @skill_window.dispose
  79.     end
  80.     if @item_window != nil
  81.       @item_window.dispose
  82.     end
  83.     if @result_window != nil
  84.       @result_window.dispose
  85.     end
  86.     # 释放活动块
  87.     @spriteset.dispose
  88.     # 标题画面切换中的情况
  89.     if $scene.is_a?(Scene_Title)
  90.       # 淡入淡出画面
  91.       Graphics.transition
  92.       Graphics.freeze
  93.     end
  94.     # 战斗测试或者游戏结束以外的画面切换中的情况
  95.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  96.       $scene = nil
  97.     end
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 胜负判定
  101.   #--------------------------------------------------------------------------
  102.   def judge
  103.     # 全灭判定是真、并且同伴人数为 0 的情况下
  104.     if $game_party.all_dead? or $game_party.actors.size == 0
  105.       # 允许失败的情况下
  106.       if $game_temp.battle_can_lose
  107.         # 还原为战斗开始前的 BGM
  108.         $game_system.bgm_play($game_temp.map_bgm)
  109.         # 战斗结束
  110.         battle_end(2)
  111.         # 返回 true
  112.         return true
  113.       end
  114.       # 设置游戏结束标志
  115.       $game_temp.gameover = true
  116.       # 返回 true
  117.       return true
  118.     end
  119.     # 如果存在任意 1 个敌人就返回 false
  120.     for enemy in $game_troop.enemies
  121.       if enemy.exist?
  122.         return false
  123.       end
  124.     end
  125.     # 开始结束战斗回合 (胜利)
  126.     start_phase5
  127.     # 返回 true
  128.     return true
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 战斗结束
  132.   #     result : 結果 (0:胜利 1:失败 2:逃跑)
  133.   #--------------------------------------------------------------------------
  134.   def battle_end(result)
  135.     # 清除战斗中标志
  136.     $game_temp.in_battle = false
  137.     # 清除全体同伴的行动
  138.     $game_party.clear_actions
  139.     # 解除战斗用状态
  140.     for actor in $game_party.actors
  141.       actor.remove_states_battle
  142.     end
  143.     # 清除敌人
  144.     $game_troop.enemies.clear
  145.     # 调用战斗返回
  146.     if $game_temp.battle_proc != nil
  147.       $game_temp.battle_proc.call(result)
  148.       $game_temp.battle_proc = nil
  149.     end
  150.     # 切换到地图画面
  151.     $scene = Scene_Map.new
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 设置战斗事件
  155.   #--------------------------------------------------------------------------
  156.   def setup_battle_event
  157.     # 正在执行战斗事件的情况下
  158.     if $game_system.battle_interpreter.running?
  159.       return
  160.     end
  161.     # 搜索全部页的战斗事件
  162.     for index in 0...$data_troops[@troop_id].pages.size
  163.       # 获取事件页
  164.       page = $data_troops[@troop_id].pages[index]
  165.       # 事件条件可以参考 c
  166.       c = page.condition
  167.       # 没有指定任何条件的情况下转到下一页
  168.       unless c.turn_valid or c.enemy_valid or
  169.              c.actor_valid or c.switch_valid
  170.         next
  171.       end
  172.       # 执行完毕的情况下转到下一页
  173.       if $game_temp.battle_event_flags[index]
  174.         next
  175.       end
  176.       # 确认回合条件
  177.       if c.turn_valid
  178.         n = $game_temp.battle_turn
  179.         a = c.turn_a
  180.         b = c.turn_b
  181.         if (b == 0 and n != a) or
  182.            (b > 0 and (n < 1 or n < a or n % b != a % b))
  183.           next
  184.         end
  185.       end
  186.       # 确认敌人条件
  187.       if c.enemy_valid
  188.         enemy = $game_troop.enemies[c.enemy_index]
  189.         if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
  190.           next
  191.         end
  192.       end
  193.       # 确认角色条件
  194.       if c.actor_valid
  195.         actor = $game_actors[c.actor_id]
  196.         if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
  197.           next
  198.         end
  199.       end
  200.       # 确认开关条件
  201.       if c.switch_valid
  202.         if $game_switches[c.switch_id] == false
  203.           next
  204.         end
  205.       end
  206.       # 设置事件
  207.       $game_system.battle_interpreter.setup(page.list, 0)
  208.       # 本页的范围是 [战斗] 或 [回合] 的情况下
  209.       if page.span <= 1
  210.         # 设置执行结束标志
  211.         $game_temp.battle_event_flags[index] = true
  212.       end
  213.       return
  214.     end
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ● 刷新画面
  218.   #--------------------------------------------------------------------------
  219.   def update
  220.     if Input.trigger?(Input::F9)  #[color=Red][b]F9快捷键档  [/b][/color]
  221.     p "我是一个快捷键F9"
  222.     end   
  223.     # 执行战斗事件中的情况下
  224.     if $game_system.battle_interpreter.running?
  225.       # 刷新解释器
  226.       $game_system.battle_interpreter.update
  227.       # 强制行动的战斗者不存在的情况下
  228.       if $game_temp.forcing_battler == nil
  229.         # 执行战斗事件结束的情况下
  230.         unless $game_system.battle_interpreter.running?
  231.           # 继续战斗的情况下、再执行战斗事件的设置
  232.           unless judge
  233.             setup_battle_event
  234.           end
  235.         end
  236.         # 如果不是结束战斗回合的情况下
  237.         if @phase != 5
  238.           # 刷新状态窗口
  239.           @status_window.refresh
  240.         end
  241.       end
  242.     end
  243.     # 系统 (计时器)、刷新画面
  244.     $game_system.update
  245.     $game_screen.update
  246.     # 计时器为 0 的情况下
  247.     if $game_system.timer_working and $game_system.timer == 0
  248.       # 中断战斗
  249.       $game_temp.battle_abort = true
  250.     end
  251.     # 刷新窗口
  252.     @help_window.update
  253.     @party_command_window.update
  254.     @actor_command_window.update
  255.     @status_window.update
  256.     @message_window.update
  257.     # 刷新活动块
  258.     @spriteset.update
  259.     # 处理过渡中的情况下
  260.     if $game_temp.transition_processing
  261.       # 清除处理过渡中标志
  262.       $game_temp.transition_processing = false
  263.       # 执行过渡
  264.       if $game_temp.transition_name == ""
  265.         Graphics.transition(20)
  266.       else
  267.         Graphics.transition(40, "Graphics/Transitions/" +
  268.           $game_temp.transition_name)
  269.       end
  270.     end
  271.     # 显示信息窗口中的情况下
  272.     if $game_temp.message_window_showing
  273.       return
  274.     end
  275.     # 显示效果中的情况下
  276.     if @spriteset.effect?
  277.       return
  278.     end
  279.     # 游戏结束的情况下
  280.     if $game_temp.gameover
  281.       # 切换到游戏结束画面
  282.       $scene = Scene_Gameover.new
  283.       return
  284.     end
  285.     # 返回标题画面的情况下
  286.     if $game_temp.to_title
  287.       # 切换到标题画面
  288.       $scene = Scene_Title.new
  289.       return
  290.     end
  291.     # 中断战斗的情况下
  292.     if $game_temp.battle_abort
  293.       # 还原为战斗前的 BGM
  294.       $game_system.bgm_play($game_temp.map_bgm)
  295.       # 战斗结束
  296.       battle_end(1)
  297.       return
  298.     end
  299.     # 等待中的情况下
  300.     if @wait_count > 0
  301.       # 减少等待计数
  302.       @wait_count -= 1
  303.       return
  304.     end
  305.     # 强制行动的角色存在、
  306.     # 并且战斗事件正在执行的情况下
  307.     if $game_temp.forcing_battler == nil and
  308.        $game_system.battle_interpreter.running?
  309.       return
  310.     end
  311.     # 回合分支
  312.     case @phase
  313.     when 1  # 自由战斗回合
  314.       update_phase1
  315.     when 2  # 同伴命令回合
  316.       update_phase2
  317.     when 3  # 角色命令回合
  318.       update_phase3
  319.     when 4  # 主回合
  320.       update_phase4
  321.     when 5  # 战斗结束回合
  322.       update_phase5
  323.     end
  324.   end
  325. end
复制代码
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36432
在线时间
10798 小时
注册时间
2009-3-15
帖子
4814
8
发表于 2021-9-1 19:23:03 | 只看该作者
RUBY 代码复制
  1. if !@message_window.visible and Input.trigger?(Input::F9)

点评

这个bug解决了!  发表于 2021-9-1 19:37

评分

参与人数 1+1 收起 理由
taeckle + 1 大神英明,日月同辉!

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
9
发表于 2021-9-1 22:38:12 | 只看该作者
用 $game_temp.message_window_showing 来判断就可以了

点评

认可答案  发表于 2021-9-2 14:39

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
taeckle + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

10
发表于 2021-9-2 19:09:49 | 只看该作者
本帖最后由 guoxiaomi 于 2021-9-2 19:18 编辑

正常的思路应该是增强显示文字的功能,用某些指令改变BGM吧?比如输入
  1. \BGM["theme01"]
复制代码
就会切换BGM。你要不看看RB写的对话增强有没有改变BGM的功能,这脚本太长了我就不看了:https://rpg.blue/thread-382811-1-1.html
打开看了看,有播放SE的功能,那把608行那些改成播放BGM就完事了:
  1.           # \a的情况下
  2.           if c == "\004"
  3.             @now_text.sub!(/\[(.*?)\]/, "")
  4.             se_filename = "Audio/SE/#{$1}"
  5.             if FileTest.exist?(se_filename)
  6.               Audio.se_play(se_filename)
  7.             end
  8.             c = ""
  9.           end
复制代码

评分

参与人数 2星屑 +30 +1 收起 理由
RyanBern + 30 太长不看还行
taeckle + 1 多谢大神指点!

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 15:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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