设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3162|回复: 2
打印 上一主题 下一主题

[RMVX发布] 计时管理器【VX】

[复制链接]

Lv2.观梦者

旅之愚者

梦石
0
星屑
275
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

跳转到指定楼层
1
发表于 2010-12-13 00:33:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 六祈 于 2010-12-13 00:58 编辑

这个东西的创意来自于一个偶尔的想法:
【在场景类中,某一些update的计算不需要每帧调用】
该脚本用于自动化管理这类update

使用方法:
1、在你需要使用该计时管理器的类中混入Scene_Timer模块
  1. class Scene_Map
  2. include Scene_Timer
  3. end
复制代码
2、定义你的方法
  1. class Scene_Map
  2. def add_vari
  3. $game_variables[1] += 1
  4. end
  5. end
复制代码
3、添加一个计时器Timer到管理器【可以在场景类的start方法内加入,或者在场景类实例化完成后用$scene.add_timer】
     参数依次为间隔帧数(int),方法名(符号),第三个参数为可选,设置为true,则调用一次方法后就弃置该计时器。
  1. $scene.add_timer(4, :add_vari)
复制代码
目前bug:调用菜单后由于$scene的重新赋值,已有的timer会消失
脚本冲突可能性:无

脚本代码:
  1. class Timer_Container
  2.   def initialize(scene)
  3.     @scene = scene
  4.     @container = []
  5.     @frame_max = 0
  6.     @frame_count = 0
  7.   end
  8.   
  9.   def update
  10.     return if @frame_max == 0
  11.     @frame_count += 1
  12.     @frame_count = 0 if @frame_count >= @frame_max
  13.     @container.each do |timer|
  14.       if @frame_count % timer.inter_frame == 0
  15.         @scene.send timer.method_name
  16.         self.delete(timer) if timer.run_once
  17.       end
  18.     end
  19.   end
  20.   
  21.   def add(inter_frame, method_name, run_once)
  22.     @container << VX_Timer.new(inter_frame, method_name, run_once)
  23.     remake_maxFrame
  24.   end
  25.   
  26.   def delete(timer)
  27.     @container.delete(timer)
  28.     remake_maxFrame
  29.   end
  30.   
  31.   def remake_maxFrame
  32.     @frame_max = @container.inject(1){|number, timer| number *= timer.inter_frame}
  33.   end
  34.   
  35.   class VX_Timer
  36.     def initialize(inter_frame, method_name, run_once)
  37.       @inter_frame = inter_frame
  38.       @method_name = method_name
  39.       @run_once = run_once
  40.     end
  41.     attr_reader :inter_frame, :method_name, :run_once
  42.   end
  43. end

  44. module Scene_Timer
  45.   def initialize(*args)
  46.     @timer_container = Timer_Container.new(self)
  47.     super(*args)
  48.   end
  49.   
  50.   def update
  51.     @timer_container.update
  52.     super
  53.   end
  54.   
  55.   def add_timer(inter_frame, method_name, run_once = false)
  56.     @timer_container.add(inter_frame, method_name, run_once)
  57.   end
  58.   
  59. end
复制代码
最后是一个范例 Project1.rar (238.21 KB, 下载次数: 116)
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
24 小时
注册时间
2010-12-4
帖子
24
2
发表于 2010-12-13 10:08:19 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

旅之愚者

梦石
0
星屑
275
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

3
 楼主| 发表于 2010-12-13 17:22:34 | 只看该作者
回复 贤将娜兹玲 的帖子

娜娜姐姐~这样的话又需要定时清理管理器中的timer了,不然会一直存在的说

点评

还是没明白这个脚本的用途...  发表于 2013-9-5 03:48
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 00:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表