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

Project1

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

[已经解决] 关于XP计时器的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
41
在线时间
1026 小时
注册时间
2011-9-10
帖子
1415
跳转到指定楼层
1
发表于 2013-9-7 01:49:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 y610407721 于 2013-9-7 17:27 编辑

  1. #==============================================================================
  2. # ■ Sprite_Timer
  3. #------------------------------------------------------------------------------
  4. #  显示计时器用的活动块。监视 $game_system 、活动块状态
  5. # 自动变化。
  6. #==============================================================================

  7. class Sprite_Timer < Sprite
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super
  13.     @use_decimal = false
  14.     if @use_decimal
  15.       self.bitmap = Bitmap.new(126, 32)
  16.     else
  17.       self.bitmap = Bitmap.new(90, 32)
  18.     end
  19.     self.x = 640 - self.bitmap.width
  20.     self.y = 0
  21.     self.z = 500
  22.     update
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 释放
  26.   #--------------------------------------------------------------------------
  27.   def dispose
  28.     if self.bitmap != nil
  29.       self.bitmap.dispose
  30.     end
  31.     super
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 刷新画面
  35.   #--------------------------------------------------------------------------
  36.   def update
  37.     super
  38.     # 设置计时器执行中为可见
  39.     self.visible = $game_system.timer_working
  40.     # 如果有必要再次描绘计时器
  41.     if $game_system.timer * 10 / Graphics.frame_rate != @total_sec
  42.       # 计算总计秒数
  43.       @total_sec = $game_system.timer * 10 / Graphics.frame_rate
  44.       # 生成计时器显示用字符串
  45.       min = @total_sec / 600
  46.       sec = (@total_sec % 600) / 10
  47.       dec = @total_sec % 10
  48.       # 使用小数的情况下,总是刷新
  49.       if @use_decimal
  50.         text = sprintf("%02d:%02d.%1d", min, sec, dec)
  51.       # 不使用小数,只有小数为是0 5 7 8 9时才刷新
  52.       elsif dec > 6 or dec == 0
  53.         text = sprintf("%02d:%02d", min, sec)
  54.       elsif dec == 5
  55.         text = sprintf("%02d %02d", min, sec)
  56.       end
  57.       # 需要刷新的情况下
  58.       if text != nil
  59.         # 清除位图
  60.         self.bitmap.clear
  61.         # 切割时间字符串
  62.         timer_array = text.scan(/./).reverse
  63.         # 从右向左填充
  64.         x = self.bitmap.width - 18
  65.         # 如果10秒内用红色,60秒内用黄色,其他时间用绿色
  66.         if @total_sec < 100
  67.           rect_y = 64
  68.         elsif @total_sec < 600
  69.           rect_y = 32
  70.         else
  71.           rect_y = 0
  72.         end
  73.         # 循环每一个字符填充位图
  74.         is_dec = @use_decimal
  75.         is_changing = true
  76.         for char in timer_array
  77.           if char == ":"
  78.             bitmap.blt(x, 0, RPG::Cache.picture("Timer"),
  79.               Rect.new(180, rect_y, 18, 32))
  80.           elsif char == "."
  81.             bitmap.blt(x, 0, RPG::Cache.picture("Timer"),
  82.               Rect.new(198, rect_y, 18, 32))
  83.             is_dec = false
  84.           elsif char != " "
  85.             timer_x = char.to_i * 18
  86.             # 需要显示完整数字的情况下
  87.             if is_dec or !is_changing or dec < 8
  88.               bitmap.blt(x, 0, RPG::Cache.picture("Timer"),
  89.                 Rect.new(timer_x, rect_y, 18, 32))
  90.             # 显示滑动数字
  91.             elsif dec == 9
  92.               timer_x_old = (char.to_i + 1) % 10 * 18
  93.               bitmap.blt(x, 11, RPG::Cache.picture("Timer"),
  94.                 Rect.new(timer_x_old, rect_y, 18, 21))
  95.               bitmap.blt(x, 0, RPG::Cache.picture("Timer"),
  96.                 Rect.new(timer_x, rect_y + 21, 18, 11))
  97.               is_changing = false if char.to_i < 9
  98.             elsif dec == 8
  99.               timer_x_old = (char.to_i + 1) % 10 * 18
  100.               bitmap.blt(x, 21, RPG::Cache.picture("Timer"),
  101.                 Rect.new(timer_x_old, rect_y, 18, 11))
  102.               bitmap.blt(x, 0, RPG::Cache.picture("Timer"),
  103.                 Rect.new(timer_x, rect_y + 11, 18, 21))
  104.               is_changing = false if char.to_i < 9
  105.             end
  106.           end
  107.           x -= 18
  108.         end
  109.       end
  110.     end
  111.   end
  112. end
复制代码
我计时器设置的是并行处理,然后这是我设置的事件:

我设置的是60:00,就是一个小时,但是当计时的时候,计时器前一分钟会很正常从60:00一直到59:00,可是当到59:00的时候,他并没有继续倒计时变成58:59,而是又变回了60:00。。。。就开始这样子的循环了,到底是哪里出了问题,以上是我使用的脚本 QAQ

Lv1.梦旅人

梦石
0
星屑
60
在线时间
257 小时
注册时间
2012-7-16
帖子
86
2
发表于 2013-9-7 07:36:20 | 只看该作者
本帖最后由 1341093574 于 2013-9-7 07:50 编辑

我想应该弄个开关!加一页事件!
哦~可以了!我刚刚去试过了!
第一页
第二页

评分

参与人数 1星屑 +10 收起 理由
y610407721 + 10 已解决,但还是感谢你

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
3
发表于 2013-9-7 08:03:26 | 只看该作者
不用独立开关中止并行的事件会一直循环
比如用脚本调出Window_Gold的窗口,选用并行处理,会发现窗口一直叠加

评分

参与人数 1星屑 +10 收起 理由
y610407721 + 10 已解决,但还是感谢你

查看全部评分

《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-29 21:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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