| 赞 | 0  | 
 
| VIP | 135 | 
 
| 好人卡 | 6 | 
 
| 积分 | 3 | 
 
| 经验 | 37799 | 
 
| 最后登录 | 2020-4-30 | 
 
| 在线时间 | 812 小时 | 
 
 
 
 
 
Lv2.观梦者 旅之愚者
	- 梦石
 - 0 
 
        - 星屑
 - 325 
 
        - 在线时间
 - 812 小时
 
        - 注册时间
 - 2007-7-28
 
        - 帖子
 - 2148
 
 
  
  
 | 
	
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
x
 
 本帖最后由 六祈 于 2010-12-13 00:58 编辑  
 
这个东西的创意来自于一个偶尔的想法: 
【在场景类中,某一些update的计算不需要每帧调用】 
该脚本用于自动化管理这类update 
 
使用方法: 
1、在你需要使用该计时管理器的类中混入Scene_Timer模块- class Scene_Map
 
 - include Scene_Timer
 
 - end
 
  复制代码 2、定义你的方法- class Scene_Map
 
 - def add_vari
 
 - $game_variables[1] += 1
 
 - end
 
 - end
 
  复制代码 3、添加一个计时器Timer到管理器【可以在场景类的start方法内加入,或者在场景类实例化完成后用$scene.add_timer】 
     参数依次为间隔帧数(int),方法名(符号),第三个参数为可选,设置为true,则调用一次方法后就弃置该计时器。- $scene.add_timer(4, :add_vari)
 
  复制代码 目前bug:调用菜单后由于$scene的重新赋值,已有的timer会消失 
脚本冲突可能性:无 
 
脚本代码:- class Timer_Container
 
 -   def initialize(scene)
 
 -     @scene = scene
 
 -     @container = []
 
 -     @frame_max = 0
 
 -     @frame_count = 0
 
 -   end
 
 -   
 
 -   def update
 
 -     return if @frame_max == 0
 
 -     @frame_count += 1
 
 -     @frame_count = 0 if @frame_count >= @frame_max
 
 -     @container.each do |timer|
 
 -       if @frame_count % timer.inter_frame == 0
 
 -         @scene.send timer.method_name
 
 -         self.delete(timer) if timer.run_once
 
 -       end
 
 -     end
 
 -   end
 
 -   
 
 -   def add(inter_frame, method_name, run_once)
 
 -     @container << VX_Timer.new(inter_frame, method_name, run_once)
 
 -     remake_maxFrame
 
 -   end
 
 -   
 
 -   def delete(timer)
 
 -     @container.delete(timer)
 
 -     remake_maxFrame
 
 -   end
 
 -   
 
 -   def remake_maxFrame
 
 -     @frame_max = @container.inject(1){|number, timer| number *= timer.inter_frame}
 
 -   end
 
 -   
 
 -   class VX_Timer
 
 -     def initialize(inter_frame, method_name, run_once)
 
 -       @inter_frame = inter_frame
 
 -       @method_name = method_name
 
 -       @run_once = run_once
 
 -     end
 
 -     attr_reader :inter_frame, :method_name, :run_once
 
 -   end
 
 - end
 
  
- module Scene_Timer
 
 -   def initialize(*args)
 
 -     @timer_container = Timer_Container.new(self)
 
 -     super(*args)
 
 -   end
 
 -   
 
 -   def update
 
 -     @timer_container.update
 
 -     super
 
 -   end
 
 -   
 
 -   def add_timer(inter_frame, method_name, run_once = false)
 
 -     @timer_container.add(inter_frame, method_name, run_once)
 
 -   end
 
 -   
 
 - end
 
  复制代码 最后是一个范例
 
Project1.rar
(238.21 KB, 下载次数: 116)
 |   
 
 
 
 |