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

Project1

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

[有事请教] 如何让计时器数字变化的速度与游戏帧率一样快?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
140
在线时间
17 小时
注册时间
2021-8-20
帖子
5
跳转到指定楼层
1
发表于 昨天 17:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
想整一个类似合金装备里警报时的数字显示,最后一位数字的变化速度和游戏帧率一样,或者直接显示当前的帧也行。
使用的计时器脚本
RUBY 代码复制
  1. #---------
  2. #已经移植到RPG MAKER VX ACE
  3. #Lanza
  4. #---------
  5. #==============================================================================
  6. # ★ 多组多功能计时器 ★       -> by   芯☆淡茹水
  7. #==============================================================================
  8. # ● 使用方法:1,复制脚本,插入到 main 前。
  9. #
  10. #              2,启动计时:
  11. #                 
  12. #                 PS:注意这里!!!!!!!!!!!!!!
  13. #                 改为了$game_timer 而非原版$game_system
  14. #
  15. #                 事件 -> 脚本 :$game_timer.start_time(tit, min, switch, add)
  16. #
  17. #                 括号里的参数:tit    -> 标题 。比如:双倍经验时间;副本时间,等
  18. #                                         代入的参数为 字符串 。由于计时窗口宽度
  19. #                                         有限,标题最好不要超过 5 个汉字。
  20. #
  21. #                               min    -> 计时时间X分钟。(注意是分钟,可以是小数)
  22. #
  23. #                               switch -> 计时完成后打开的开关ID。
  24. #
  25. #                               add    -> 正计时标志。需要正计时写 true ,不需要
  26. #                                         时可不写。
  27. #
  28. #               3,中途取消计时:
  29. #        
  30. #                    事件 -> 脚本:$game_system.end_time(switch_id)
  31. #
  32. #                    括号里的参数:switch_id  -> 对应的计时器打开的开关ID。
  33. #==============================================================================
  34. # ● 说明:
  35. #           该计时器理论上可同时无限个计时。
  36. #
  37. #           计时窗口只在地图场景显示,战斗场景不显示计时窗口,但仍然会计时,
  38. #           其他场景不计时。
  39. #
  40. #           计时完成后自动打开启动计时时设置的开关,需要实现什么功能可通过事件,
  41. #           开关,公共事件,等,来协调完成。这个就自己开脑洞。
  42. #           可参照范例工程的示范(事件,公共事件)。
  43. #     
  44. #==============================================================================
  45. # ● 设置:
  46. module X☆R
  47.   #--------------------------------------------------------------------------
  48.   # 计时窗口 X 坐标。
  49.   TM_WINDOW_X = 280
  50.  
  51.   #--------------------------------------------------------------------------
  52.   # 计时窗口 Y 坐标。
  53.   TM_WINDOW_Y = 15
  54.  
  55.   #--------------------------------------------------------------------------
  56.   # 计时窗口标题字体颜色。
  57.   TM_TIT_COLOR = Color.new(255,0,0)
  58.  
  59.   #--------------------------------------------------------------------------
  60.   # 计时窗时间字体颜色(30 秒以上)。
  61.   TM_TIME_COLOR1 = Color.new(255,0,0)
  62.  
  63.   #--------------------------------------------------------------------------
  64.   # 计时窗时间字体颜色(10 - 30 秒)。
  65.   TM_TIME_COLOR2 = Color.new(255,0,0)
  66.  
  67.   #--------------------------------------------------------------------------
  68.   # 计时窗时间字体颜色(0 - 10 秒)。
  69.   TM_TIME_COLOR3 = Color.new(255,0,0)
  70.  
  71.   #--------------------------------------------------------------------------
  72.   # 最后 10 秒是否声音提示?
  73.   TM_SOUND_TIP = false
  74.  
  75.   #--------------------------------------------------------------------------
  76.   # 声音提示的 SE 文件名。
  77.   TM_SOUND = "Switch1"
  78. end
  79. #==============================================================================
  80. class Time_Meter
  81.   attr_reader     :switch_id, :title, :add_count
  82.   attr_accessor   :sec, :max_sec
  83.   #--------------------------------------------------------------------------
  84.   def initialize(title, min, switch_id, add)
  85.     @title = title
  86.     @max_sec = @sec = Integer(min * 60)
  87.     @sec = 0 if add
  88.     @switch_id = switch_id
  89.     @add_count = add ? 1 : -1
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   def sec_judge
  93.     return @add_count > 0 ? @sec < @max_sec : @sec > 0
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   def update
  97.     @sec += @add_count if sec_judge and Graphics.frame_count % Graphics.frame_rate == 0
  98.     unless sec_judge
  99.       $game_switches[@switch_id] = true
  100.       $game_map.need_refresh = true
  101.     end
  102.     if @data_sec != @sec and @add_count < 0
  103.       @data_sec = @sec
  104.       if @sec < 10 and X☆R::TM_SOUND_TIP and $scene.is_a?(Scene_Map)
  105.         Audio.se_play("Audio/SE/#{X☆R::TM_SOUND}", 80, 100)
  106.       end
  107.     end
  108.   end
  109. end
  110. #==============================================================================
  111. class Window_Tm < Sprite
  112.   #--------------------------------------------------------------------------
  113.   def initialize(x, y, time)
  114.     super()
  115.     self.x = x
  116.     self.y = y
  117.     self.z = 9999
  118.     @time = time
  119.     bitmap = Cache.character($game_player.character_name)
  120.     @b_width = bitmap.width / 8
  121.     @b_height = bitmap.height / 4
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   def dispose
  125.     self.bitmap.dispose if self.bitmap
  126.     super
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   def refresh
  130.     self.bitmap.dispose if self.bitmap
  131.     self.bitmap = Bitmap.new("Graphics/Pictures/Time_meter_back")
  132.     self.bitmap.font.size = 18
  133.     self.bitmap.font.bold = true
  134.     cx = self.bitmap.text_size(@time.title).width
  135.     self.bitmap.font.color = X☆R::TM_TIT_COLOR
  136.     self.bitmap.draw_text(35, 0, cx, 30, @time.title)
  137.     if @time.add_count > 0
  138.       color = X☆R::TM_TIME_COLOR1
  139.     else
  140.       color = @time.sec >= 30 ? X☆R::TM_TIME_COLOR1 :
  141.       (@time.sec >= 10 ? X☆R::TM_TIME_COLOR2 : X☆R::TM_TIME_COLOR3)
  142.     end
  143.     hour = @time.sec / 3600
  144.     min = @time.sec / 60 % 60
  145.     sec = @time.sec % 60
  146.     text = sprintf("%02d:%02d:%02d", hour, min, sec)
  147.     self.bitmap.font.color = color
  148.     self.bitmap.draw_text(130, 0, 90, 30, text, 2)
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   def update
  152.     return if self.disposed?
  153.     super
  154.     if @data_sec != @time.sec
  155.       @data_sec = @time.sec
  156.       refresh
  157.     end
  158.     if self.x < $game_player.screen_x + @b_width and
  159.      self.x + 240 > $game_player.screen_x - @b_width and
  160.      self.y + 30 < $game_player.screen_y and
  161.      self.y > $game_player.screen_y - @b_height
  162.       self.opacity = 80
  163.     else
  164.       self.opacity = 255 if self.opacity < 255
  165.     end
  166.     dispose unless @time.sec_judge
  167.   end
  168. end
  169. #==============================================================================
  170. class Game_Timer
  171.   #--------------------------------------------------------------------------
  172.   alias add_initialize_xr initialize
  173.   def initialize
  174.     add_initialize_xr
  175.     @time_meters = []
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   def time_meters
  179.     return @time_meters
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   def start_time(title="", min=0, switch_id=0, add=false)
  183.     return if min == 0 or switch_id == 0
  184.     for t in @time_meters
  185.       if t.switch_id == switch_id
  186.         t.add_count > 0 ? t.max_sec += Integer(min * 60) : t.sec += Integer(min * 60)
  187.         return
  188.       end
  189.     end
  190.     @time_meters.push(Time_Meter.new(title, min, switch_id, add))
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   def end_time(switch_id)
  194.     for t in @time_meters
  195.       if t.switch_id == switch_id
  196.         @time_meters.delete(t)
  197.       end
  198.     end
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   alias old_update_xr update
  202.   def update
  203.     unless @time_meters.empty?
  204.       for time in @time_meters
  205.         time.update
  206.         unless time.sec_judge
  207.           @time_meters.delete(time)
  208.           next
  209.         end
  210.       end
  211.     end
  212.     old_update_xr
  213.   end
  214. end
  215. #==============================================================================
  216. class Scene_Map
  217.   #--------------------------------------------------------------------------
  218.   alias old_main_xr main
  219.   def main
  220.     @time_window = []
  221.     old_main_xr
  222.     @time_window.each{|t| t.dispose}
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   alias old_update_xr update
  226.   def update
  227.     if @data_time != $game_timer.time_meters
  228.       @data_time = $game_timer.time_meters.clone
  229.       @time_window.each{|t| t.dispose}
  230.       unless $game_timer.time_meters.empty?
  231.         for i in 0...$game_timer.time_meters.size
  232.           time = $game_timer.time_meters[i]
  233.           nx = X☆R::TM_WINDOW_X > 320 ? -240 : 240
  234.           nx = i / 8 * nx
  235.           x = X☆R::TM_WINDOW_X + nx ; y = i % 8 * 30 + X☆R::TM_WINDOW_Y
  236.           @time_window[i] = Window_Tm.new(x, y, time)
  237.         end
  238.       end
  239.     end
  240.     unless @time_window.empty?
  241.       for w in @time_window
  242.         w.update
  243.         @time_window.delete(w) if w.disposed?
  244.       end
  245.     end
  246.     old_update_xr
  247.   end
  248. end
  249. #==============================================================================

求大佬解答

Lv1.梦旅人

梦石
0
星屑
140
在线时间
17 小时
注册时间
2021-8-20
帖子
5
2
 楼主| 发表于 22 分钟前 | 只看该作者
想了一下直接把原帖链接放到这里更好https://rpg.blue/thread-401351-1-1.html
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-22 15:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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