赞 | 0 |
VIP | 135 |
好人卡 | 6 |
积分 | 3 |
经验 | 37799 |
最后登录 | 2020-4-30 |
在线时间 | 812 小时 |
Lv2.观梦者 旅之愚者
- 梦石
- 0
- 星屑
- 275
- 在线时间
- 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)
|
|