じ☆ve冰风 发表于 2024-4-19 21:31:17

[RMXP]时间流逝窗口

呼,终于写好了,目前只支持儒略历。
原创脚本:
RUBY 代码
#-------------------------------------------------------------------------------
# 时间流逝 by 876加几
#-------------------------------------------------------------------------------
class Window_Time < Window_Base
#--------------------------------------------------------------------------
# ● 初始化窗口
#--------------------------------------------------------------------------
def initialize
    super(0, 0, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    if$game_switches != true
      @year_index = -1#这个可以随便改,但要符合实际(还要在下面计算出来)
      @month_index = 1
      @day_index = 1
      @hour_index = 9
      @minute_index = 0
      @second_index = 0
      @cycle_index = 1   #后面三个不用计算,并且要符合实际
      @season_index = 4
      @leap = false
      $game_switches = true
    end
    refresh
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
    self.contents.clear
    #存储数据/读取数据
    if@year_index != nil
      $game_variables = @year_index
    else
      @year_index = $game_variables
    end
    if@month_index != nil
      $game_variables = @month_index
    else
      @month_index = $game_variables
    end
    if@day_index != nil
      $game_variables = @day_index
    else
      @day_index = $game_variables
    end
    if@cycle_index != nil
      $game_variables = @cycle_index
    else
      @cycle_index = $game_variables
    end
    if@season_index != nil
      $game_variables = @season_index
    else
      @season_index = $game_variables
    end
    if@leap != nil
      $game_switches = @leap
    else
      @leap = $game_switches
    end
    #时间显示
    time = sprintf("%02d:%02d:%02d", @hour_index, @minute_index, @second_index)
      #判断这个月是什么月
      if@month_index == 1
      @judge_index = 1
      elsif@month_index == 2
      @judge_index = 3
      elsif@month_index == 3
      @judge_index = 1
      elsif@month_index == 4
      @judge_index = 2
      elsif@month_index == 5
      @judge_index = 1
      elsif@month_index == 6
      @judge_index = 2
      elsif@month_index == 7
      @judge_index = 1
      elsif@month_index == 8
      @judge_index = 1
      elsif@month_index == 9
      @judge_index = 2
      elsif@month_index == 10
      @judge_index = 1
      elsif@month_index == 11
      @judge_index = 2
      elsif@month_index == 12
      @judge_index = 1
      end
      #星期变更
      if@hour_index == 23and@minute_index == 59
      case@cycle_index
      when1
          @cycle_index = 2
      when2
          @cycle_index = 3
      when3
          @cycle_index = 4
      when4
          @cycle_index = 5
      when5
          @cycle_index = 6
      when6
          @cycle_index = 7
      when7
          @cycle_index = 1
      end
      end
      #制造时间动力
      @total_second = Graphics.frame_count * 50
      @second_index = @total_second % 60
      @minute_index = @total_second / 60 % 60
      @hour_index = @total_second / 60 / 60 % 24
      case@judge_index
      when1#大月
      @day_index = @total_second / 60 / 60 / 24 % 30 + 1
      @month_index = @total_second / 60 / 60 / 24 / 30 % 11 + 1
      when2#小月
      @day_index = @total_second / 60 / 60 / 24 % 29
      @month_index = @total_second / 60 / 60 / 24 / 29 % 11 + 1
      when3#特殊月
      if@leap == true
          @day_index = @total_second / 60 / 60 / 24 % 28
          @month_index = @total_second / 60 / 60 / 24 / 28 % 11 + 1
      else
          @day_index = @total_second / 60 / 60 / 24 % 27
          @month_index = @total_second / 60 / 60 / 24 / 27 % 11 + 1
      end
      end
      if@leap == true
      @year_index = @total_second / 60 / 60 / 24 / 365 + 1
      else
      @year_index = @total_second / 60 / 60 / 24 / 364 + 1
      end
      #季度判断
      case@month_index
      when2
      @season_index = 1
      when5
      @season_index = 2
      when8
      @season_index = 3
      when11
      @season_index = 4
      end
    self.contents.font.color = normal_color
    self.contents.draw_text(360, 0, 120, 32, time, 2)
    #判断是否为闰年
    @leap_index = @year_index
    @leap_index %= 4
    if@leap_index == 0
      @leap = true
    else
      @leap = false
    end
    #绘制
    mx = self.contents.text_size(@month_index.to_s).width
    dx = self.contents.text_size(@day_index.to_s).width
    if@year_index < 0
      @yearf_index = @year_index * (0 - 1)
      yx = self.contents.text_size(@yearf_index.to_s).width
      self.contents.draw_text(16, 0, 72, 32,"公元前")
      self.contents.draw_text(82, 0, 72, 32, @yearf_index.to_s)
      self.contents.draw_text(82+yx, 0, 32, 32, "年")
      self.contents.draw_text(102+yx, 0, 20, 32, @month_index.to_s)
      self.contents.draw_text(102+yx+mx, 0, 32, 32, "月")
      self.contents.draw_text(122+yx+mx, 0, 20, 32, @day_index.to_s)
      self.contents.draw_text(122+yx+mx+dx, 0, 32, 32, "日")
    else
      yx = self.contents.text_size(@year_index.to_s).width
      self.contents.draw_text(16, 0, 72, 32,"公元")
      self.contents.draw_text(60, 0, 72, 32, @year_index.to_s)
      self.contents.draw_text(60+yx, 0, 32, 32, "年")
      self.contents.draw_text(80+yx, 0, 20, 32, @month_index.to_s)
      self.contents.draw_text(80+yx+mx, 0, 32, 32, "月")
      self.contents.draw_text(100+yx+mx, 0, 20, 32, @day_index.to_s)
      self.contents.draw_text(100+yx+mx+dx, 0, 32, 32, "日")
    end
    case@cycle_index
    when1#星期一
      self.contents.draw_text(296, 0, 72, 32, "星期一")
    when2#星期二
      self.contents.draw_text(296, 0, 72, 32, "星期二")
    when3
      self.contents.draw_text(296, 0, 72, 32, "星期三")
    when4
      self.contents.draw_text(296, 0, 72, 32, "星期四")
    when5
      self.contents.draw_text(296, 0, 72, 32, "星期五")
    when6
      self.contents.draw_text(296, 0, 72, 32, "星期六")
    when7
      self.contents.draw_text(296, 0, 72, 32, "星期日")
    end
    case@season_index
    when1# 春季
      self.contents.draw_text(512, 0, 32, 32, "春")
    when2# 夏季
      self.contents.draw_text(512, 0, 32, 32, "夏")
    when3# 秋季
      self.contents.draw_text(512, 0, 32, 32, "秋")
    when4# 冬季
      self.contents.draw_text(512, 0, 32, 32, "冬")
    end
    #色相修改
    case@season_index
    when1
      if@hour_index == 7
      $game_screen.start_tone_change(Tone.new(64,0,0,0),20)
      elsif@hour_index == 8
      $game_screen.start_tone_change(Tone.new(0,0,0,0),20)
      elsif@hour_index == 19
      $game_screen.start_tone_change(Tone.new(64,0,0,0),20)
      elsif@hour_index == 20
      $game_screen.start_tone_change(Tone.new(-64,-64,64,0),20)
      elsif@hour_index == 0
      $game_screen.start_tone_change(Tone.new(-128,-128,128,0),20)
      end
    when2
      if@hour_index == 6
      $game_screen.start_tone_change(Tone.new(64,0,0,0),20)
      elsif@hour_index == 7
      $game_screen.start_tone_change(Tone.new(0,0,0,0),20)
      elsif@hour_index == 20
      $game_screen.start_tone_change(Tone.new(64,0,0,0),20)
      elsif@hour_index == 21
      $game_screen.start_tone_change(Tone.new(-64,-64,64,0),20)
      elsif@hour_index == 0
      $game_screen.start_tone_change(Tone.new(-128,-128,128,0),20)
      end
    when3
      if@hour_index == 7
      $game_screen.start_tone_change(Tone.new(64,0,0,0),20)
      elsif@hour_index == 8
      $game_screen.start_tone_change(Tone.new(0,0,0,0),20)
      elsif@hour_index == 19
      $game_screen.start_tone_change(Tone.new(64,0,0,0),20)
      elsif@hour_index == 20
      $game_screen.start_tone_change(Tone.new(-64,-64,64,0),20)
      elsif@hour_index == 0
      $game_screen.start_tone_change(Tone.new(-128,-128,128,0),20)
      end
    when4
      if@hour_index == 8
      $game_screen.start_tone_change(Tone.new(64,0,0,0),20)
      elsif@hour_index == 9
      $game_screen.start_tone_change(Tone.new(0,0,0,0),20)
      elsif@hour_index == 18
      $game_screen.start_tone_change(Tone.new(64,0,0,0),20)
      elsif@hour_index == 19
      $game_screen.start_tone_change(Tone.new(-64,-64,64,0),20)
      elsif@hour_index == 0
      $game_screen.start_tone_change(Tone.new(-128,-128,128,0),20)
      end
    end
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
    super
    if Graphics.frame_count * 50 != @total_second
      refresh
    end
end
end
因为天气变化放进去过于唐突,所以我不写天气变化。
范例:

发现一转换场景,很多数据变成nil,所以我就占用一些Switches和Variables。
裁图:



Q:leap那些分别是什么?
A:leap判断平闰年,season是季节判断,year、month、day、hour、minute和second各代表年、月、日、小时、分钟、秒。
有的组件千万不能改!!!
范例新添的脚本要用这个脚本全文替换!!!
发现有个bug,先修改了。
             本帖来自P1论坛作者876加几,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=332811若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: [RMXP]时间流逝窗口