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

Project1

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

[已发主站] 【XP】系统计时器美化脚本

[复制链接]

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23186
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

跳转到指定楼层
1
发表于 2012-4-28 02:36:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Sion 于 2013-12-17 16:17 编辑

使用说明:复制本脚本全部内容,插入Main之前,或者直接全文替换掉Sprite_Timer的内容
将附件1下载后存为"Timer.png"放在pictures文件夹下
美化显示效果有两种:
效果1:码表式(带1个小数位)第14行赋值为true
效果2:电子表式(不带小数位,冒号会跳动)第14行赋值为false
不管哪一种方式,整数秒的时间退位时,都有滑动效果
你也可以把第14行改为赋值为某开关,以便实现动态控制计时器的显示效果

  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
复制代码
附件1:

效果示意图:

点评

地图还真不是拿的……你把那个所谓的被拿的地图贴上来看看?  发表于 2012-5-2 22:22
确定地图是从6大xx老游戏里拿的  发表于 2012-5-2 21:57

评分

参与人数 1+6 收起 理由
Shy07 + 6 主站收录

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

2
发表于 2012-4-28 12:01:59 | 只看该作者
会加重系统负担吗……
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

3
发表于 2012-4-28 22:32:02 | 只看该作者
电子表加自己PS个电子数字感觉效果还是应该不错的……
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23186
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

4
 楼主| 发表于 2012-5-2 21:32:47 | 只看该作者
天使喝可乐 发表于 2012-4-28 12:01
会加重系统负担吗……

不会的,测试过了,每4帧才重绘一次(码表模式),电子表模式每40帧重绘5次
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG我的

梦石
0
星屑
163
在线时间
491 小时
注册时间
2012-1-16
帖子
1993
5
发表于 2012-5-2 21:56:24 | 只看该作者
我看到fps怎么才1
帐号并非本人使用!
帐号并非本人使用!
帐号并非本人使用!
帐号并非本人使用!
帐号并非本人使用!
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23186
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

6
 楼主| 发表于 2012-5-2 22:08:30 | 只看该作者
永远の路克酱 发表于 2012-5-2 21:56
我看到fps怎么才1

截图的时候开了QQ……真正测试的时候fps没下过39
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

昨日的黄昏

梦石
0
星屑
1005
在线时间
937 小时
注册时间
2006-11-5
帖子
4128

第2届短篇游戏比赛季军第3届短篇游戏大赛小游戏及其他组季军

7
发表于 2012-5-3 16:12:03 | 只看该作者
不知道是不是有点强迫症= =
看到
if @use_decimal

      self.bitmap = Bitmap.new(126, 32)

    else

      self.bitmap = Bitmap.new(90, 32)

    end
就想改写为 self.bitmap  = @use_decimal ? Bitmap.new(126, 32) : Bitmap.new(90, 32)

点评

超长了,我的习惯是写脚本不超过右边界……可以考虑self.bitmap=Bitmap.new(@use_decimal ? 126 : 90, 32)  发表于 2012-5-3 19:06
[url=http://weibo.com/2238291690?s=6uyXnP]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 20:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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