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

Project1

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

[已经解决] 求脚本window_selectable的原版代码

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2013-7-15
帖子
26
跳转到指定楼层
1
发表于 2013-7-16 20:14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 ozp111 于 2013-7-17 09:39 编辑

求脚本window_selectable的原版代码{:2_286:} 黄昏时分弄错备份。杯具了。

点评

新建一个工程不就得了……  发表于 2013-7-16 20:23

Lv1.梦旅人

梦石
0
星屑
50
在线时间
260 小时
注册时间
2013-4-19
帖子
216
2
发表于 2013-7-16 20:16:54 | 只看该作者
  1. #==============================================================================
  2. # ■ Window_Selectable
  3. #------------------------------------------------------------------------------
  4. #  拥有光标的移动以及滚动功能的窗口类。
  5. #==============================================================================

  6. class Window_Selectable < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 定义实例变量
  9.   #--------------------------------------------------------------------------
  10.   attr_reader   :item_max                 # 选项数
  11.   attr_reader   :column_max               # 行数
  12.   attr_reader   :index                    # 光标位置
  13.   attr_reader   :help_window              # 帮助窗口
  14.   #--------------------------------------------------------------------------
  15.   # ● 初始化对像
  16.   #     x      : 窗口 X 座标
  17.   #     y      : 窗口 Y 座标
  18.   #     width  : 窗口宽度
  19.   #     height : 窗口高度
  20.   #     spacing : 横向排列时栏间空格
  21.   #--------------------------------------------------------------------------
  22.   def initialize(x, y, width, height, spacing = 32)
  23.     @item_max = 1
  24.     @column_max = 1
  25.     @index = -1
  26.     @spacing = spacing
  27.     super(x, y, width, height)
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 生成窗口内容
  31.   #--------------------------------------------------------------------------
  32.   def create_contents
  33.     self.contents.dispose
  34.     self.contents = Bitmap.new(width - 32, [height - 32, row_max * WLH].max)
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 设置光标位置
  38.   #     index : 新光标位置
  39.   #--------------------------------------------------------------------------
  40.   def index=(index)
  41.     @index = index
  42.     update_cursor
  43.     call_update_help
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 计算行数
  47.   #--------------------------------------------------------------------------
  48.   def row_max
  49.     return (@item_max + @column_max - 1) / @column_max
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 获取首行
  53.   #--------------------------------------------------------------------------
  54.   def top_row
  55.     return self.oy / WLH
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 设置首行
  59.   #     row : 显示在最上的行
  60.   #--------------------------------------------------------------------------
  61.   def top_row=(row)
  62.     row = 0 if row < 0
  63.     row = row_max - 1 if row > row_max - 1
  64.     self.oy = row * WLH
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 获取一页能显示的行数
  68.   #--------------------------------------------------------------------------
  69.   def page_row_max
  70.     return (self.height - 32) / WLH
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 获取一页能显示的选项
  74.   #--------------------------------------------------------------------------
  75.   def page_item_max
  76.     return page_row_max * @column_max
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 获取末行
  80.   #--------------------------------------------------------------------------
  81.   def bottom_row
  82.     return top_row + page_row_max - 1
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 设置末行
  86.   #     row : 显示在最底的行
  87.   #--------------------------------------------------------------------------
  88.   def bottom_row=(row)
  89.     self.top_row = row - (page_row_max - 1)
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 设置选项矩形
  93.   #     index : 项目编号
  94.   #--------------------------------------------------------------------------
  95.   def item_rect(index)
  96.     rect = Rect.new(0, 0, 0, 0)
  97.     rect.width = (contents.width + @spacing) / @column_max - @spacing
  98.     rect.height = WLH
  99.     rect.x = index % @column_max * (rect.width + @spacing)
  100.     rect.y = index / @column_max * WLH
  101.     return rect
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 设置帮助窗口
  105.   #     help_window : 新帮助窗口
  106.   #--------------------------------------------------------------------------
  107.   def help_window=(help_window)
  108.     @help_window = help_window
  109.     call_update_help
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 判断光标是否能够移动
  113.   #--------------------------------------------------------------------------
  114.   def cursor_movable?
  115.     return false if (not visible or not active)
  116.     return false if (index < 0 or index > @item_max or @item_max == 0)
  117.     return false if (@opening or @closing)
  118.     return true
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 光标下移
  122.   #     wrap : 允许循环
  123.   #--------------------------------------------------------------------------
  124.   def cursor_down(wrap = false)
  125.     if (@index < @item_max - @column_max) or (wrap and @column_max == 1)
  126.       @index = (@index + @column_max) % @item_max
  127.     end
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 光标上移
  131.   #     wrap : 允许循环
  132.   #--------------------------------------------------------------------------
  133.   def cursor_up(wrap = false)
  134.     if (@index >= @column_max) or (wrap and @column_max == 1)
  135.       @index = (@index - @column_max + @item_max) % @item_max
  136.     end
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 光标右移
  140.   #     wrap : 允许循环
  141.   #--------------------------------------------------------------------------
  142.   def cursor_right(wrap = false)
  143.     if (@column_max >= 2) and
  144.        (@index < @item_max - 1 or (wrap and page_row_max == 1))
  145.       @index = (@index + 1) % @item_max
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 光标左移
  150.   #     wrap : 允许循环
  151.   #--------------------------------------------------------------------------
  152.   def cursor_left(wrap = false)
  153.     if (@column_max >= 2) and
  154.        (@index > 0 or (wrap and page_row_max == 1))
  155.       @index = (@index - 1 + @item_max) % @item_max
  156.     end
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 光标移至下一页
  160.   #--------------------------------------------------------------------------
  161.   def cursor_pagedown
  162.     if top_row + page_row_max < row_max
  163.       @index = [@index + page_item_max, @item_max - 1].min
  164.       self.top_row += page_row_max
  165.     end
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 光标移至上一页
  169.   #--------------------------------------------------------------------------
  170.   def cursor_pageup
  171.     if top_row > 0
  172.       @index = [@index - page_item_max, 0].max
  173.       self.top_row -= page_row_max
  174.     end
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 更新画面
  178.   #--------------------------------------------------------------------------
  179.   def update
  180.     super
  181.     if cursor_movable?
  182.       last_index = @index
  183.       if Input.repeat?(Input::DOWN)
  184.         cursor_down(Input.trigger?(Input::DOWN))
  185.       end
  186.       if Input.repeat?(Input::UP)
  187.         cursor_up(Input.trigger?(Input::UP))
  188.       end
  189.       if Input.repeat?(Input::RIGHT)
  190.         cursor_right(Input.trigger?(Input::RIGHT))
  191.       end
  192.       if Input.repeat?(Input::LEFT)
  193.         cursor_left(Input.trigger?(Input::LEFT))
  194.       end
  195.       if Input.repeat?(Input::R)
  196.         cursor_pagedown
  197.       end
  198.       if Input.repeat?(Input::L)
  199.         cursor_pageup
  200.       end
  201.       if @index != last_index
  202.         Sound.play_cursor
  203.       end
  204.     end
  205.     update_cursor
  206.     call_update_help
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● 更新光标
  210.   #--------------------------------------------------------------------------
  211.   def update_cursor
  212.     if @index < 0                   # 当光标位置小于0
  213.       self.cursor_rect.empty        # 隐藏光标
  214.     else                            # 当光标位置为0或大于
  215.       row = @index / @column_max    # 获取当前行
  216.       if row < top_row              # 若先于首行
  217.         self.top_row = row          # 向上滚动
  218.       end
  219.       if row > bottom_row           # 若後于末行
  220.         self.bottom_row = row       # 向下滚动
  221.       end
  222.       rect = item_rect(@index)      # 获取所选项目矩形
  223.       rect.y -= self.oy             # 设矩形为滚动位置
  224.       self.cursor_rect = rect       # 更新光标矩形
  225.     end
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ● 呼叫更新帮助窗口
  229.   #--------------------------------------------------------------------------
  230.   def call_update_help
  231.     if self.active and @help_window != nil
  232.        update_help
  233.     end
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● 更新帮助窗口(子类定义)
  237.   #--------------------------------------------------------------------------
  238.   def update_help
  239.   end
  240. end
复制代码

评分

参与人数 1星屑 +1 收起 理由
怪蜀黍 + 1 你应该让LZ新建一个工程

查看全部评分

【轩辕Game】
【广告位出租】
【广告位出租】
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2013-7-15
帖子
26
3
 楼主| 发表于 2013-7-16 20:19:14 | 只看该作者
没想好 发表于 2013-7-16 20:16

谢谢。堆满10个字节
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 12:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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