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

Project1

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

[原创发布] [RMXP]时间流逝窗口?(Time实例)【2013-10-3 10:10:00更新】

[复制链接]

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

跳转到指定楼层
1
发表于 2013-9-20 09:08:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 kuerlulu 于 2013-10-3 10:11 编辑

原帖(其实这两个贴靠一起)
嗯 用Ruby自己的Time.now重做了这个效果,而且一点创新都没加,
唯一能说的就是代码更简单了吧】其实还可以优化的比如我可以把详细显示时刻的一行换成strftime("%X")不是更短么】何弃疗
嗯 我想说界面确实和原帖一摸一样不信看图  233那个秒是截图的问题= =
工程就不贴了,我在原来一个大坑上改的
RUBY 代码复制下载
  1. #==============================================================================
  2. # ■ Window_Time
  3. #------------------------------------------------------------------------------
  4. #  使用Time.now显示游戏时间的窗口。
  5. #==============================================================================
  6.  
  7. class Window_Time < Window_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super(0, 0, 640, 64)
  13.     self.contents = Bitmap.new(width - 32, height - 32)
  14.     refresh
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● 刷新
  18.   #--------------------------------------------------------------------------
  19.   def refresh
  20.     self.contents.clear
  21.     self.contents.font.color = system_color
  22.     #self.contents.draw_text(4, 0, 120, 32, "游戏时间")
  23.     @total_sec = Graphics.frame_count / Graphics.frame_rate
  24.     #hour = @total_sec / 60 / 60
  25.     #min = @total_sec / 60 % 60
  26.     #sec = @total_sec % 60
  27.     #text = sprintf("%02d:%02d:%02d", hour, min, sec)
  28.     # ■ %02d是指补全2位数字比如"3"自动补全成"03"
  29.     #self.contents.font.color = normal_color
  30.     #--------------------------------------------------------------------------
  31.     # ● Time类是从这里开始的
  32.     #--------------------------------------------------------------------------
  33.     time = Time.now
  34.     case time.wday
  35.       when 0
  36.         week = "天"
  37.       when 1
  38.         week = "一"
  39.       when 2
  40.         week = "二"
  41.       when 3
  42.         week = "三"
  43.       when 4
  44.         week = "四"
  45.       when 5
  46.         week = "五"
  47.       when 6
  48.         week = "六"
  49.     end
  50.     case time.mon
  51.       when 1..3
  52.         season = "春"
  53.       when 4..6
  54.         season = "夏"
  55.       when 7..9
  56.         season = "秋"
  57.       when 10..12
  58.         season = "冬"
  59.     end
  60.     detail = sprintf("%02d:%02d:%02d", time.hour, time.min, time.sec)
  61.     text = "星期" + week + "   " + detail + "   " + season + "     "
  62.     text2 = "  " + time.year.to_s + "年" + time.month.to_s + "月" + time.day.to_s + "日"
  63.     # 这里分两个主要是为了一个左对齐一个右对齐 其实没必要
  64.     self.contents.draw_text(4, 0, 594, 32, text2)
  65.     self.contents.draw_text(4, 0, 594, 32, text, 2)
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 刷新画面
  69.   #--------------------------------------------------------------------------
  70.   def update
  71.     super
  72.     if Graphics.frame_count / Graphics.frame_rate != @total_sec
  73.       refresh
  74.     end
  75.   end
  76. end

我无聊吧,连原帖做的Window_Time的类名都没改,所以如果你要把这两个脚本放一块绝逼会被重定义。。
嗯,要显示在Scene_Map的话就加一句显示Time窗口的代码就行了,不要忘了在下面加上.update(第一次弄的时候看到时间不动好捉急)
实际上Time.now能做很多事,比如计算时间差这种神奇的方法。
就到这里了
我真的不是在那啥原作者数字君@876加几  


我TM真无聊
正如你所见这是个倒计时,而且是采用了小学算术原理 ,其实用总秒数也是可以做的。
当然这个倒计时会有不符合常理的地方,比如月的计算到底是当30天还是31天,总之我是默认30天了。
激励我用功学习
RUBY 代码复制下载
  1. #==============================================================================
  2. # ■ Window_Time2
  3. #------------------------------------------------------------------------------
  4. #  我要一个显示剩余时间的窗口。
  5. #==============================================================================
  6.  
  7. class Window_Time2 < Window_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super(0, 0, 640, 64)
  13.     self.contents = Bitmap.new(width - 32, height - 32)
  14.     self.opacity = 160
  15.     # ■剩余时间变量初始化■
  16.     @leftyear = 0
  17.     @leftmon = 0
  18.     @leftday = 0
  19.     @lefthour = 0
  20.     @leftmin = 0
  21.     @leftsec = 0
  22.     @left = "还有"
  23.     refresh
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 刷新
  27.   #--------------------------------------------------------------------------
  28.   def refresh
  29.     # ■来设定目标时间吧■年月日时分秒[如果光用算法来做的话]
  30.     target = "高考"
  31.     targetyear = 2015
  32.     targetmon = 6
  33.     targetday = 7
  34.     targethour = 7
  35.     targetmin = 0
  36.     targetsec = 0
  37.     self.contents.clear
  38.     self.contents.font.color = system_color
  39.     @total_sec = Graphics.frame_count / Graphics.frame_rate
  40.     #text = sprintf("%02d:%02d:%02d", hour, min, sec)
  41.     # ■ %02d是指补全2位数字比如"3"自动补全成"03"
  42.     #--------------------------------------------------------------------------
  43.     # ● Time类是从这里开始的
  44.     #--------------------------------------------------------------------------
  45.     time = Time.now
  46.     #--------------------------------------------------------------------------
  47.     # ● 算法部分(2) 小学算术(减法)原理= =|||:先算末尾再推进
  48.     #--------------------------------------------------------------------------
  49.     if targetsec - time.sec < 0
  50.       @leftmin -= 1
  51.       @leftsec = 60 + targetsec - time.sec
  52.     else
  53.       @leftsec = targetsec - time.sec
  54.     end
  55.     if targetmin - time.min < 0
  56.       @lefthour -= 1
  57.       @leftmin = 60 + targetmin - time.min
  58.     else
  59.       @leftmin = targetmin - time.min
  60.     end
  61.     if targethour - time.hour < 0
  62.       @leftday -= 1
  63.       @lefthour = 24 + targethour - time.hour
  64.     else
  65.       @lefthour = targethour - time.hour
  66.     end
  67.     if targetday - time.day < 0
  68.       @leftmon -= 1
  69.       @leftday = 30 + targetday - time.day # ■这样写绝逼会产生1-2天的误差 我猜
  70.     else
  71.       @leftday = targetday - time.day
  72.     end
  73.     if targetmon - time.mon < 0
  74.       @leftyear -= 1
  75.       @leftmon = 12 + targetmon - time.mon
  76.     else
  77.       @leftmon = targetmon - time.mon
  78.     end
  79.     if targetyear - time.year < 0
  80.       @left = "已过"
  81.       @leftyear = -(targetyear - time.year)
  82.     else
  83.       @leftyear = targetyear - time.year
  84.     end
  85.     #--------------------------------------------------------------------------
  86.     text = "距离 "+ target + " " + @left + @leftyear.to_s + "年" + @leftmon.to_s + "月" + @leftday.to_s + "天" + @lefthour.to_s + "小时" + @leftmin.to_s + "分钟" + @leftsec.to_s + "秒"
  87.     self.contents.draw_text(4, 0, 594, 32, text, 2)
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 刷新画面
  91.   #--------------------------------------------------------------------------
  92.   def update
  93.     super
  94.     if Graphics.frame_count / Graphics.frame_rate != @total_sec
  95.       refresh
  96.     end
  97.   end
  98. end

这是对Time的怨念

最终更新,用mktime做倒计时,绝逼没问题了

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_Time2
  3. #------------------------------------------------------------------------------
  4. #  我要一个显示剩余时间的窗口。
  5. #==============================================================================
  6.  
  7. class Window_Time2 < Window_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super(0, 64, 640, 64)
  13.     self.contents = Bitmap.new(width - 32, height - 32)
  14.     self.opacity = 160
  15. #    # ■剩余时间变量初始化■
  16. #    @leftyear = 0
  17. #    @leftmon = 0
  18.     @leftday = 0
  19.     @lefthour = 0
  20.     @leftmin = 0
  21.     @leftsec = 0
  22.     @left = "还有"
  23.     refresh
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 刷新
  27.   #--------------------------------------------------------------------------
  28.   def refresh
  29.     # ■来设定目标时间吧■年月日时分秒[如果光用算法来做的话]
  30.     target = "高考"
  31.     targetyear = 2015
  32.     targetmon = 6
  33.     targetday = 7
  34.     targethour = 7
  35.     targetmin = 0
  36.     targetsec = 0
  37.     self.contents.clear
  38.     self.contents.font.color = system_color
  39.     @total_sec = Graphics.frame_count / Graphics.frame_rate
  40.     #text = sprintf("%02d:%02d:%02d", hour, min, sec)
  41.     # ■ %02d是指补全2位数字比如"3"自动补全成"03"
  42.     #--------------------------------------------------------------------------
  43.     # ● Time类是从这里开始的
  44.     #--------------------------------------------------------------------------
  45.     time = Time.now
  46.     targettime = Time.mktime(targetyear, targetmon, targetday, targethour, targetmin, targetsec)
  47.     totalsec = targettime - time
  48.     if totalsec >= 0
  49.       @left = "还有"
  50.     else
  51.       @left = "已过"
  52.       totalsec = time - targettime
  53.     end
  54.     @leftday = totalsec.to_i / 86400
  55.     @lefthour = (totalsec.to_i % 86400) / 60 / 60
  56.     @leftmin = totalsec.to_i / 60 % 60
  57.     @leftsec = totalsec.to_i % 60
  58.     #--------------------------------------------------------------------------
  59.     #text2 = "       距离 "+ target + " " + @left + @leftyear.to_s + "年" + @leftmon.to_s + "月" + @leftday.to_s + "天" + @lefthour.to_s + "小时" + @leftmin.to_s + "分钟" + @leftsec.to_s + "秒"
  60.     text = "          距离" + " " + target + " " + @left + @leftday.to_s + "天" + @lefthour.to_s + "时" + @leftmin.to_s + "分" + @leftsec.to_s + "秒"
  61.     self.contents.draw_text(4, 0, 594, 32, text)
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 刷新画面
  65.   #--------------------------------------------------------------------------
  66.   def update
  67.     super
  68.     if Graphics.frame_count / Graphics.frame_rate != @total_sec
  69.       refresh
  70.     end
  71.   end
  72. end

点评

@876加几 。。。。。。。。。  发表于 2013-9-20 10:03
我测试了的,有时有的数据会丢失,还有时会出错。  发表于 2013-9-20 09:59

  -fk: -azogi:

Lv1.梦旅人

梦石
0
星屑
117
在线时间
552 小时
注册时间
2012-8-18
帖子
1429
2
发表于 2013-9-20 12:59:15 | 只看该作者
Window_Time什么的不用Time都是作死
我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-30 01:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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