查看: 3905|回复: 1

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

[复制链接]
梦石
0
星屑
660
在线时间
1286 小时
注册时间
2011-6-14
回帖
3949
发表于 2012-8-26 14:31:22 | 显示全部楼层 |阅读模式

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

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

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

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

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

脚本:
核心:(我承认没改多少)
[pre lang="ruby" line="1"]#==============================================================================
# RMXP时钟 原作 by 沉影不器   XP化 by satgo1546
#------------------------------------------------------------------------------
# 功能描述: 显示一个带指针的时钟
# 素材准备: 时钟指针分别命名为 hour_hand、minute_hand、second_hand
#           时钟背景命名为 clock_bg,另需要一个盖住指针的圆扣命名为 top_button
#           放入Windowskins文件夹
# 使用方法: Main之前插入脚本,在需要时钟的场景中调用:
#           Sprite_Clock.new(x坐标, y坐标, 不透明度)
#           (参考范例Scene_Map添加时钟)
#           脚本第19行设定控制时钟显示的变量号
#==============================================================================
# □ Sprite_Clock
#==============================================================================
class Sprite_Clock
  #--------------------------------------------------------------------------
  # ◎ 常量
  #--------------------------------------------------------------------------
  SHOW_SWITCH_ID = 10
  #--------------------------------------------------------------------------
  # ◎ 初始化对象
  #     x      : 时钟中心的 X 坐标
  #     y      : 时钟中心的 Y 坐标
  #     alpha  : 不透明度
  #--------------------------------------------------------------------------
  def initialize(x, y, alpha = 255)
    @x = x
    @y = y
    @alpha = alpha
    # 暂停标志
    @time_pause = false
    # 为指针更新初始化计数器
    @second_count = 0
    @minute_count = 0
    @hour_count = 0
    create_clock_bg
    # 本来想控制是否生成秒针
    for type in 0..2
      create_hands(type)
    end
    create_top_button
    # 初始化时间
    set_time
    # 显示标志
    change_visible
  end
  #--------------------------------------------------------------------------
  # ◎ 释放
  #--------------------------------------------------------------------------
  def dispose
    dispose_clock_bg
    dispose_hands
    dispose_top_button
  end
  #--------------------------------------------------------------------------
  # ◎ 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 按确定键时切换暂停标志
    if Input.repeat?(Input::L)
      @time_pause = !@time_pause
    end
    return if @time_pause
    # 以秒为单位更新指针
    update_time_now
    # 检查显示
    change_visible
  end
  #--------------------------------------------------------------------------
  # ◎ 设定时间
  #--------------------------------------------------------------------------
  def set_time
    time = Time.now
    @second = time.sec
    @second = 0 if @second == 60
    @minute = time.min
    @hour = time.hour
    @second_hand.angle = -@second*6
    @minute_hand.angle = -@minute*6 - @second.to_f/10
    @hour_hand.angle = -@hour*30 - (@minute.to_f/60)*30 - @second.to_f*(1.0/144)
  end
  #--------------------------------------------------------------------------
  # ◎ 生成时钟背景
  #--------------------------------------------------------------------------
  def create_clock_bg
    @clock_bg = Sprite.new
    @clock_bg.bitmap = RPG::Cache.windowskin("clock_bg")
    @clock_bg.opacity = @alpha
    @clock_bg.x = @x - @clock_bg.bitmap.width/2
    @clock_bg.y = @y - @clock_bg.bitmap.height/2
    @clock_bg.z = 999
  end
  #--------------------------------------------------------------------------
  # ◎ 生成顶端固定扣
  #--------------------------------------------------------------------------
  def create_top_button
    @top_button = Sprite.new
    @top_button.bitmap = RPG::Cache.windowskin("top_button")
    @top_button.opacity = @alpha
    @top_button.x = @x - @top_button.bitmap.width/2
    @top_button.y = @y - @top_button.bitmap.height/2
    @top_button.z = @second_hand.z + 1
  end
  #--------------------------------------------------------------------------
  # ◎ 生成指针
  #     type : 类型(0:时针; 1:分针; 2: 秒针)
  #--------------------------------------------------------------------------
  def create_hands(type)
    case type
    when 0
      @hour_hand = Sprite.new
      @hour_hand.bitmap = RPG::Cache.windowskin("hour_hand")
      @hour_hand.opacity = @alpha
      @hour_hand.angle_center(@x, @y)
      @hour_hand.z = @clock_bg.z + 1
    when 1
      @minute_hand = Sprite.new
      @minute_hand.bitmap = RPG::Cache.windowskin("minute_hand")
      @minute_hand.opacity = @alpha
      @minute_hand.angle_center(@x, @y)
      @minute_hand.z = @hour_hand.z + 1
    when 2
      @second_hand = Sprite.new
      @second_hand.bitmap = RPG::Cache.windowskin("second_hand")
      @second_hand.opacity = @alpha
      @second_hand.angle_center(@x, @y)
      @second_hand.z = @minute_hand.z + 1
    end
  end
  #--------------------------------------------------------------------------
  # ◎ 释放背景
  #--------------------------------------------------------------------------
  def dispose_clock_bg
    @clock_bg.dispose
  end
  #--------------------------------------------------------------------------
  # ◎ 释放指针
  #--------------------------------------------------------------------------
  def dispose_hands
    @hour_hand.dispose if @hour_hand != nil
    @minute_hand.dispose if @minute_hand != nil
    @second_hand.dispose if @second_hand != nil
  end
  #--------------------------------------------------------------------------
  # ◎ 释放顶端固定扣
  #--------------------------------------------------------------------------
  def dispose_top_button
    @top_button.dispose
  end
  #--------------------------------------------------------------------------
  # ◎ 更新指针
  #--------------------------------------------------------------------------
  def update_hands
    @hour_hand.angle -= 1.0/144
    @minute_hand.angle -= 1.0/10
    @second_hand.angle -= 6
  end
  #--------------------------------------------------------------------------
  # ◎ 更新时间
  #--------------------------------------------------------------------------
  def update_time_now
    time = Time.now
    second = time.sec
    if second != @second
      @second = second
      update_hands
    end
  end
  #--------------------------------------------------------------------------
  # ◎ 更改不透明度
  #--------------------------------------------------------------------------
  def alpha=(alpha)
    @alpha = alpha if alpha.is_a?(Integer)
  end
  #--------------------------------------------------------------------------
  # ◎ 更改可见标志
  #--------------------------------------------------------------------------
  def change_visible
    if @clock_show == $game_switches[SHOW_SWITCH_ID]
      return
    else
      @clock_show = $game_switches[SHOW_SWITCH_ID]
    end
    for i in [@clock_bg, @hour_hand, @minute_hand, @second_hand, @top_button]
      i.visible = $game_switches[SHOW_SWITCH_ID]
    end
  end
end

#==============================================================================
# ■ Sprite
#==============================================================================
class Sprite < Object
  #--------------------------------------------------------------------------
  # ◎ 设定中心旋转
  #--------------------------------------------------------------------------
  def angle_center(x, y)
    self.ox = self.bitmap.width/2
    self.oy = self.bitmap.height/2
    self.x = x
    self.y = y
  end
end[/pre]
显示在地图画面用的脚本:(第7行改坐标,透明度)
[pre lang="ruby" line="1"]class Spriteset_Map
  alias oldiniiiii initialize
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    @clock = Sprite_Clock.new(320,240,128)
    #↑这里改坐标
    # Sprite_Clock.new(x坐标, y坐标, 不透明度)
    oldiniiiii
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  alias olddisssss dispose
  def dispose
    olddisssss
    @clock.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  alias oldupddddd update
  def update
    oldupddddd
    @clock.update
  end
end[/pre]
这是使用开关控制的。
ON=显示,OFF=不显示。
如有雷同,无视即可
梦石
0
星屑
1408
在线时间
831 小时
注册时间
2007-12-25
回帖
1406
发表于 2012-8-30 20:37:15 | 显示全部楼层
很有意思的东西哦。我会不会觉得这东西应该是通用的吧。

点评

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部