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

Project1

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

[原创发布] RMXP指针型模拟时钟

[复制链接]

Lv2.观梦者

梦石
0
星屑
550
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
跳转到指定楼层
1
发表于 2012-8-26 14:31:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
搜索了一下发现站上米有XP版,就发一个吧……
如果已有可以无视
> VX原版点这里 <因为这个帖子。所以做了这个……

使用方法与VX版一样,只是图片要放在Windowskins里然后,截图:

工程:
RMXP时钟.zip (338.11 KB, 下载次数: 181)

脚本:
核心:(我承认没改多少)
RUBY 代码复制
  1. #==============================================================================
  2. # RMXP时钟 原作 by 沉影不器   XP化 by satgo1546
  3. #------------------------------------------------------------------------------
  4. # 功能描述: 显示一个带指针的时钟
  5. # 素材准备: 时钟指针分别命名为 hour_hand、minute_hand、second_hand
  6. #           时钟背景命名为 clock_bg,另需要一个盖住指针的圆扣命名为 top_button
  7. #           放入Windowskins文件夹
  8. # 使用方法: Main之前插入脚本,在需要时钟的场景中调用:
  9. #           Sprite_Clock.new(x坐标, y坐标, 不透明度)
  10. #           (参考范例Scene_Map添加时钟)
  11. #           脚本第19行设定控制时钟显示的变量号
  12. #==============================================================================
  13. # □ Sprite_Clock
  14. #==============================================================================
  15. class Sprite_Clock
  16.   #--------------------------------------------------------------------------
  17.   # ◎ 常量
  18.   #--------------------------------------------------------------------------
  19.   SHOW_SWITCH_ID = 10
  20.   #--------------------------------------------------------------------------
  21.   # ◎ 初始化对象
  22.   #     x      : 时钟中心的 X 坐标
  23.   #     y      : 时钟中心的 Y 坐标
  24.   #     alpha  : 不透明度
  25.   #--------------------------------------------------------------------------
  26.   def initialize(x, y, alpha = 255)
  27.     @x = x
  28.     @y = y
  29.     @alpha = alpha
  30.     # 暂停标志
  31.     @time_pause = false
  32.     # 为指针更新初始化计数器
  33.     @second_count = 0
  34.     @minute_count = 0
  35.     @hour_count = 0
  36.     create_clock_bg
  37.     # 本来想控制是否生成秒针
  38.     for type in 0..2
  39.       create_hands(type)
  40.     end
  41.     create_top_button
  42.     # 初始化时间
  43.     set_time
  44.     # 显示标志
  45.     change_visible
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ◎ 释放
  49.   #--------------------------------------------------------------------------
  50.   def dispose
  51.     dispose_clock_bg
  52.     dispose_hands
  53.     dispose_top_button
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ◎ 刷新画面
  57.   #--------------------------------------------------------------------------
  58.   def update
  59.     # 按确定键时切换暂停标志
  60.     if Input.repeat?(Input::L)
  61.       @time_pause = !@time_pause
  62.     end
  63.     return if @time_pause
  64.     # 以秒为单位更新指针
  65.     update_time_now
  66.     # 检查显示
  67.     change_visible
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ◎ 设定时间
  71.   #--------------------------------------------------------------------------
  72.   def set_time
  73.     time = Time.now
  74.     @second = time.sec
  75.     @second = 0 if @second == 60
  76.     @minute = time.min
  77.     @hour = time.hour
  78.     @second_hand.angle = -@second*6
  79.     @minute_hand.angle = -@minute*6 - @second.to_f/10
  80.     @hour_hand.angle = -@hour*30 - (@minute.to_f/60)*30 - @second.to_f*(1.0/144)
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ◎ 生成时钟背景
  84.   #--------------------------------------------------------------------------
  85.   def create_clock_bg
  86.     @clock_bg = Sprite.new
  87.     @clock_bg.bitmap = RPG::Cache.windowskin("clock_bg")
  88.     @clock_bg.opacity = @alpha
  89.     @clock_bg.x = @x - @clock_bg.bitmap.width/2
  90.     @clock_bg.y = @y - @clock_bg.bitmap.height/2
  91.     @clock_bg.z = 999
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ◎ 生成顶端固定扣
  95.   #--------------------------------------------------------------------------
  96.   def create_top_button
  97.     @top_button = Sprite.new
  98.     @top_button.bitmap = RPG::Cache.windowskin("top_button")
  99.     @top_button.opacity = @alpha
  100.     @top_button.x = @x - @top_button.bitmap.width/2
  101.     @top_button.y = @y - @top_button.bitmap.height/2
  102.     @top_button.z = @second_hand.z + 1
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ◎ 生成指针
  106.   #     type : 类型(0:时针; 1:分针; 2: 秒针)
  107.   #--------------------------------------------------------------------------
  108.   def create_hands(type)
  109.     case type
  110.     when 0
  111.       @hour_hand = Sprite.new
  112.       @hour_hand.bitmap = RPG::Cache.windowskin("hour_hand")
  113.       @hour_hand.opacity = @alpha
  114.       @hour_hand.angle_center(@x, @y)
  115.       @hour_hand.z = @clock_bg.z + 1
  116.     when 1
  117.       @minute_hand = Sprite.new
  118.       @minute_hand.bitmap = RPG::Cache.windowskin("minute_hand")
  119.       @minute_hand.opacity = @alpha
  120.       @minute_hand.angle_center(@x, @y)
  121.       @minute_hand.z = @hour_hand.z + 1
  122.     when 2
  123.       @second_hand = Sprite.new
  124.       @second_hand.bitmap = RPG::Cache.windowskin("second_hand")
  125.       @second_hand.opacity = @alpha
  126.       @second_hand.angle_center(@x, @y)
  127.       @second_hand.z = @minute_hand.z + 1
  128.     end
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ◎ 释放背景
  132.   #--------------------------------------------------------------------------
  133.   def dispose_clock_bg
  134.     @clock_bg.dispose
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ◎ 释放指针
  138.   #--------------------------------------------------------------------------
  139.   def dispose_hands
  140.     @hour_hand.dispose if @hour_hand != nil
  141.     @minute_hand.dispose if @minute_hand != nil
  142.     @second_hand.dispose if @second_hand != nil
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ◎ 释放顶端固定扣
  146.   #--------------------------------------------------------------------------
  147.   def dispose_top_button
  148.     @top_button.dispose
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ◎ 更新指针
  152.   #--------------------------------------------------------------------------
  153.   def update_hands
  154.     @hour_hand.angle -= 1.0/144
  155.     @minute_hand.angle -= 1.0/10
  156.     @second_hand.angle -= 6
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ◎ 更新时间
  160.   #--------------------------------------------------------------------------
  161.   def update_time_now
  162.     time = Time.now
  163.     second = time.sec
  164.     if second != @second
  165.       @second = second
  166.       update_hands
  167.     end
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ◎ 更改不透明度
  171.   #--------------------------------------------------------------------------
  172.   def alpha=(alpha)
  173.     @alpha = alpha if alpha.is_a?(Integer)
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ◎ 更改可见标志
  177.   #--------------------------------------------------------------------------
  178.   def change_visible
  179.     if @clock_show == $game_switches[SHOW_SWITCH_ID]
  180.       return
  181.     else
  182.       @clock_show = $game_switches[SHOW_SWITCH_ID]
  183.     end
  184.     for i in [@clock_bg, @hour_hand, @minute_hand, @second_hand, @top_button]
  185.       i.visible = $game_switches[SHOW_SWITCH_ID]
  186.     end
  187.   end
  188. end
  189.  
  190. #==============================================================================
  191. # ■ Sprite
  192. #==============================================================================
  193. class Sprite < Object
  194.   #--------------------------------------------------------------------------
  195.   # ◎ 设定中心旋转
  196.   #--------------------------------------------------------------------------
  197.   def angle_center(x, y)
  198.     self.ox = self.bitmap.width/2
  199.     self.oy = self.bitmap.height/2
  200.     self.x = x
  201.     self.y = y
  202.   end
  203. end

显示在地图画面用的脚本:(第7行改坐标,透明度)
RUBY 代码复制
  1. class Spriteset_Map
  2.   alias oldiniiiii initialize
  3.   #--------------------------------------------------------------------------
  4.   # ● 初始化对像
  5.   #--------------------------------------------------------------------------
  6.   def initialize
  7.     @clock = Sprite_Clock.new(320,240,128)
  8.     #↑这里改坐标
  9.     # Sprite_Clock.new(x坐标, y坐标, 不透明度)
  10.     oldiniiiii
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ● 释放
  14.   #--------------------------------------------------------------------------
  15.   alias olddisssss dispose
  16.   def dispose
  17.     olddisssss
  18.     @clock.dispose
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 刷新画面
  22.   #--------------------------------------------------------------------------
  23.   alias oldupddddd update
  24.   def update
  25.     oldupddddd
  26.     @clock.update
  27.   end
  28. end

这是使用开关控制的。
ON=显示,OFF=不显示。
如有雷同,无视即可

Lv3.寻梦者

梦石
0
星屑
1316
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
2
发表于 2012-8-30 20:37:15 | 只看该作者
很有意思的东西哦。我会不会觉得这东西应该是通用的吧。

点评

其实真的挺通用的……Cache→RPG::Cache、.picture()→.windowskin()等等  发表于 2012-8-31 12:18
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-3 15:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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