赞 | 1 |
VIP | 20 |
好人卡 | 8 |
积分 | 3 |
经验 | 6181 |
最后登录 | 2022-8-5 |
在线时间 | 271 小时 |
Lv2.观梦者 神隐的主犯
- 梦石
- 0
- 星屑
- 289
- 在线时间
- 271 小时
- 注册时间
- 2008-2-22
- 帖子
- 7691
|
- #==============================================================================
- # ■ 时间系统
- #------------------------------------------------------------------------------
- # by 八云 紫
- #==============================================================================
- #==============================================================================
- # ■ Time_byz
- #------------------------------------------------------------------------------
- # 定义 时间相关的 信息。
- #==============================================================================
- module Time_byz
- #--------------初始化定义---------------
- # 起始时间 [秒,分,时,日,月, 年]
- INIT_TIME = [55,58,23,28,02,2008]
- #--------------时间格式定义-------------
- # 时间流失方式
- # true.. 按帧数的倍数流失;false.. 按现实时间流失
- TIME_MODULE = true
- #---------------速度定义----------------
- # 流失速度(越大速度越慢)
- TIME_SPEED = 60
- # 流失速度单位
- # 1..时;2..分;3..秒;4..日
- TIME_UNIT = 3
-
- #---------------事件定义----------------
- TIME_EVENT = {
- # 事件的起始条件就是时间,但是时间的格式要与起始时间的相同。
- # 事件使用的是 公共事件,为了避免使用太多的公共事件,所以增加变量操作,
- # 以便于在相同的公共事件里可以使用条件分歧。
- # [秒,分,时,日,月, 年] => [变量ID,变量改变后的值,公共事件ID],
- [00,59,23,28,02,2008] => [1, 1, 1],
- } # 这个不要去掉
-
- #---------------窗口定义----------------
- WINDOW_X = 0
- WINDOW_Y = 0
-
- #-------------睡眠时间定义----------------
- # 小时
- SLEEP_TIME_HOUR = 8
- # 分
- SLEEP_TIME_MIN = 0
- # 秒
- SLEEP_TIME_SEC = 0
- =begin
- ---------------------------------------
- 时间间隔的判断
- ---------------------------------------
- 1. 首先需要先定义一个计时器
- $game_system.set_byz_timer(id)
- 其中的 id 可以是任何数字,字符串。
- 2. 然后在需要计算时间间隔的地方使用 条件分歧 里的脚本, 里面可以写上
- $game_system.after_time(id) > 5
- 这里的 id 要和定义的时候一致。 这个的意思是 时间经过 5秒后.....
-
- =end
- end
-
- #==============================================================================
- # ■ Game_System
- #------------------------------------------------------------------------------
- # 处理系统附属数据的类。也可执行诸如交通工具、 BGM 等管理之类的功能。
- # 本类的实例请参考$game_system 。
- #==============================================================================
- class Game_System
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :time_now
- attr_accessor :byz_timer
- attr_accessor :run_time
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- alias old_initialize initialize
- def initialize
- if Time_byz::TIME_MODULE
- year = Time_byz::INIT_TIME[5];
- mon = Time_byz::INIT_TIME[4];
- day = Time_byz::INIT_TIME[3];
- hour = Time_byz::INIT_TIME[2];
- min = Time_byz::INIT_TIME[1];
- sec = Time_byz::INIT_TIME[0];
- @time_now = Time.local(year, mon, day, hour, min, sec);
- else
- @time_now = Time.new;
- end
- @byz_timer = [];
- @run_time = true;
- old_initialize
- end
- #--------------------------------------------------------------------------
- # ● 增加时间
- #--------------------------------------------------------------------------
- def add_time(unit)
- case unit
- when 4
- @time_now += 3600 * 24;
- when 3
- @time_now += 1;
- when 2
- @time_now += 60;
- when 1
- @time_now += 3600;
- end
- end
- #--------------------------------------------------------------------------
- # ● 设定时间计时器
- #--------------------------------------------------------------------------
- def set_byz_timer(id)
- @byz_timer[id] = @time_now;
- end
- #--------------------------------------------------------------------------
- # ● 计算时间 (秒数)
- #--------------------------------------------------------------------------
- def after_time(id)
- return 0 if @byz_timer[id] == nil;
- return @time_now - @byz_timer[id];
- end
- #--------------------------------------------------------------------------
- # ● 返回时间[秒,分,时,日,月, 年, 星期]
- #--------------------------------------------------------------------------
- def return_time(type, array_time)
- logo = 6;
- now_time = [];
- loop do
- counts_the_power = type /(10 ** logo);
- type %= 10 ** logo;
- if counts_the_power == 1;
- case logo
- when 6
- times = @time_now.sec;
- when 5
- times = @time_now.min;
- when 4
- times = @time_now.hour;
- when 3
- times = @time_now.mday;
- when 2
- times = @time_now.mon;
- when 1
- times = @time_now.year;
- when 0
- times = @time_now.wday;
- end
- now_time.push(times);
- end
- logo -= 1;
- break if logo < 0;
- end
- return now_time == array_time;
- end
- #--------------------------------------------------------------------------
- # ● 时间跳跃 1..时;2..分;3..秒
- #--------------------------------------------------------------------------
- def bound_times(type, number)
- case type
- when 3
- @time_now += number;
- when 2
- @time_now += 60 * number;
- when 1
- @time_now += 3600 * number;
- end
- end
- #--------------------------------------------------------------------------
- # ● 睡眠
- #--------------------------------------------------------------------------
- def sleep_time
- hour = Time_byz::SLEEP_TIME_HOUR % 24;
- min = Time_byz::SLEEP_TIME_MIN % 60;
- sec = Time_byz::SLEEP_TIME_SEC % 60;
- @time_now += 3600 * 24;
- year = @time_now.year
- mon = @time_now.mon
- day = @time_now.mday
- @time_now = Time.local(year, mon, day, hour, min, sec);
- end
-
- end
- #==============================================================================
- # ■ Window_Byz_Time
- #------------------------------------------------------------------------------
- # 调试画面、个别显示开关及变量的窗口。
- #==============================================================================
- class Window_Byz_Time < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # x : 窗口 X 座标
- # y : 窗口 Y 座标
- #--------------------------------------------------------------------------
- def initialize(x, y)
- super(x, y, 170, 87);
- if Time_byz::TIME_MODULE
- @time_speed = Time_byz::TIME_SPEED;
- else
- @time_speed = 60;
- end
- @time = @time_speed - 1;
- refresh;
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- return unless $game_system.run_time;
- @time += 1;
- if @time_speed == @time;
- $game_system.add_time(Time_byz::TIME_UNIT);
- draw_time($game_system.time_now);
- event_run;
- @time = 0;
- end
- end
- #--------------------------------------------------------------------------
- # ● 描绘
- #--------------------------------------------------------------------------
- def draw_time(time)
- self.contents.clear;
- text = $game_system.time_now.strftime("%X")
- self.contents.draw_text(0, 0, 105, WLH, text, 2);
- text = $game_system.time_now.strftime("%Y年%m月%d日");
- self.contents.draw_text(0, 32, 170, WLH, text);
- end
- #--------------------------------------------------------------------------
- # ● 启动事件
- #--------------------------------------------------------------------------
- def event_run
- array = ($game_system.time_now.to_a)[0,6];
- if Time_byz::TIME_EVENT[array] != nil
- unless !$scene.is_a?(Scene_Map) or $game_message.visible or $game_temp.in_battle
- variables_id = Time_byz::TIME_EVENT[array][0];
- variables_number = Time_byz::TIME_EVENT[array][1];
- commonevent_id = Time_byz::TIME_EVENT[array][2];
- $game_variables[variables_id] = variables_number;
- $game_temp.common_event_id = commonevent_id;
- end
- end
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #------------------------------------------------------------------------------
- # 处理地图画面的类。
- #==============================================================================
- class Scene_Map < Scene_Base
-
- alias old_start start
- #--------------------------------------------------------------------------
- # ● 开始处理
- #--------------------------------------------------------------------------
- def start
- old_start;
- @time_window = Window_Byz_Time.new(Time_byz::WINDOW_X, Time_byz::WINDOW_Y);
- end
- alias old_terminate terminate
- #--------------------------------------------------------------------------
- # ● 结束处理
- #--------------------------------------------------------------------------
- def terminate
- old_terminate;
- @time_window.dispose;
- end
- alias old_update update
- #--------------------------------------------------------------------------
- # ● 更新画面
- #--------------------------------------------------------------------------
- def update
- old_update;
- @time_window.refresh;
- end
- end
复制代码
用法: 调用 $game_system.sleep_time 即可。
睡眠之后的时间设定参照 脚本 41 行~~~ 系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~ |
|