Project1
标题:
计时管理器【VX】
[打印本页]
作者:
六祈
时间:
2010-12-13 00:33
标题:
计时管理器【VX】
本帖最后由 六祈 于 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)
2010-12-13 00:33 上传
点击文件名下载附件
作者:
贤将娜兹玲
时间:
2010-12-13 10:08
提示:
作者被禁止或删除 内容自动屏蔽
作者:
六祈
时间:
2010-12-13 17:22
回复
贤将娜兹玲
的帖子
娜娜姐姐~这样的话又需要定时清理管理器中的timer了,不然会一直存在的说
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1