Project1

标题: 请问怎么做计时的选项 [打印本页]

作者: hy2000    时间: 2020-7-23 09:40
标题: 请问怎么做计时的选项
打算在剧情中加入一个审问环节,为了体现出紧迫感,想加入之前在某些游戏中看到过的计时选项。会有时间条,限时内不回答就进入额外选项,有没有比较好的思路?
作者: shmily0725    时间: 2020-7-23 14:43
关注 同问
作者: 灯笼菜刀王    时间: 2020-7-23 15:57
本帖最后由 灯笼菜刀王 于 2020-7-23 16:00 编辑
  1. TIME_OUT_SW = 10086 #时间到打开的开关编号
  2. class Window_Message < Window_Selectable
  3.   def update
  4.     super
  5.     # 渐变的情况下
  6.     if @fade_in
  7.       self.contents_opacity += 24
  8.       if @input_number_window != nil
  9.         @input_number_window.contents_opacity += 24
  10.       end
  11.       if self.contents_opacity == 255
  12.         @fade_in = false
  13.       end
  14.       return
  15.     end
  16.     # 输入数值的情况下
  17.     if @input_number_window != nil
  18.       @input_number_window.update
  19.       if Input.trigger?(Input::C)
  20.         $game_system.se_play($data_system.decision_se)
  21.         $game_variables[$game_temp.num_input_variable_id] =
  22.           @input_number_window.number
  23.         $game_map.need_refresh = true
  24.         @input_number_window.dispose
  25.         @input_number_window = nil
  26.         terminate_message
  27.       end
  28.       return
  29.     end
  30.     if @contents_showing
  31.       if $game_temp.choice_max == 0
  32.         self.pause = true
  33.       end
  34.       if $game_switches[TIME_OUT_SW]
  35.         if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  36.           $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  37.           terminate_message
  38.         end
  39.         $game_switches[TIME_OUT_SW] = false
  40.       end
  41.       # 取消
  42.       if Input.trigger?(Input::B)
  43.         if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  44.           $game_system.se_play($data_system.cancel_se)
  45.           $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  46.           terminate_message
  47.         end
  48.       end
  49.       # 确定
  50.       if Input.trigger?(Input::C)
  51.         if $game_temp.choice_max > 0
  52.           $game_system.se_play($data_system.decision_se)
  53.           $game_temp.choice_proc.call(self.index)
  54.         end
  55.         terminate_message
  56.       end
  57.       return
  58.     end
  59.     if @fade_out == false and $game_temp.message_text != nil
  60.       @contents_showing = true
  61.       $game_temp.message_window_showing = true
  62.       reset_window
  63.       refresh
  64.       Graphics.frame_reset
  65.       self.visible = true
  66.       self.contents_opacity = 0
  67.       if @input_number_window != nil
  68.         @input_number_window.contents_opacity = 0
  69.       end
  70.       @fade_in = true
  71.       return
  72.     end
  73.     # 没有可以显示的信息、但是窗口为可见的情况下
  74.     if self.visible
  75.       @fade_out = true
  76.       self.opacity -= 48
  77.       if self.opacity == 0
  78.         self.visible = false
  79.         @fade_out = false
  80.         $game_temp.message_window_showing = false
  81.       end
  82.       return
  83.     end
  84.   end
  85. end
复制代码


把这个塞到MAIN前, 第一行设置好编号, 打开这个开关的时候就会强制执行选择"取消"的选项

然后在选项之前启动一个并行处理, 内容为等待XX帧, 然后打开时间到开关(记得关闭自身,避免一直处于并行处理状态) 就实现了限时回答的功能

至于计时条的UI什么的,用图片一起并行处理显示就好啦




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1