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

Project1

 找回密码
 注册会员
搜索

請教如何修改選單光標的間距

查看数: 1675 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2012-5-12 03:36

正文摘要:

本帖最后由 sai90306 于 2012-5-12 03:39 编辑 以下是我做的測試用選單(只是做個樣子來突顯我的問題沒有任何功能) 這是選單的基本樣子 這是選單index =1 和 =2的比較 可以發現兩個index之間有一段藍色的距 ...

回复

忧雪の伤 发表于 2012-5-12 13:32:02
本帖最后由 忧雪の伤 于 2012-5-12 13:34 编辑
  1.   #--------------------------------------------------------------------------
  2.   # ● 刷新光标矩形
  3.   #--------------------------------------------------------------------------
  4.   def update_cursor_rect
  5.     if @index < 0
  6.       self.cursor_rect.empty
  7.     else
  8.       self.cursor_rect.set(0, @index * 116, self.width - 32, 96)
  9.     end
  10.   end
复制代码
例如这个,请看到
self.cursor_rect.set

这个部分,这个方法的参数就是你需要改的东西。当然,这个是纵列的,
横列应该是
cursor_rect.set(@index * n, y, w, h)

第一个参数是每一格移动的长度,第二个是选框的纵坐标,第三个是选框的宽度,第四个是选框的长度,随意修改就好。
也就是说,大概会增加一个这样的方法(自己调整参数
  1.   def update_cursor_rect
  2.     self.cursor_rect.set(2 + @index * 96, 2, 96, 32)
  3.   end
复制代码
注意这个修改不是在 selectable 中而是在自己创建的子类中。

点评

明白了!感謝指點!  发表于 2012-5-12 13:37
sai90306 发表于 2012-5-12 13:25:44
本帖最后由 sai90306 于 2012-5-12 13:26 编辑
忧雪の伤 发表于 2012-5-12 11:53
不不不,请拿出 update_cursor_rect …… 要修改的是这个。


是不是這個?(Window_CommandMenu_Sai90306 < Window_Selectable)
  1. #==============================================================================
  2. # ■ Window_Selectable
  3. #------------------------------------------------------------------------------
  4. # 擁有游標移動以及捲動功能的視窗類別。

  5. #要調整視窗顯示行數搜索 #調整視窗顯示行數
  6. #==============================================================================

  7. class Window_Selectable_Sai < Window_Base_Sai
  8.   #--------------------------------------------------------------------------
  9.   # ● 定義實例變量
  10.   #--------------------------------------------------------------------------
  11.   attr_reader   :index                    # 游標位置
  12.   attr_reader   :help_window              # 提示視窗
  13.   #--------------------------------------------------------------------------
  14.   # ● 初始化對像
  15.   #     x      : 視窗的 X 座標
  16.   #     y      : 視窗的 Y 座標
  17.   #     width  : 視窗的寬度
  18.   #     height : 視窗的高度
  19.   #--------------------------------------------------------------------------
  20.   def initialize(x, y, width, height)
  21.     super(x, y, width, height)
  22.     @item_max = 1
  23.     @column_max = 1
  24.     @index = -1
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 設定游標的位置
  28.   #     index : 新的游標位置
  29.   #--------------------------------------------------------------------------
  30.   def index=(index)
  31.     @index = index
  32.     # 更新提示內容 (由 update_help 定義了繼承目標)
  33.     if self.active and @help_window != nil
  34.       update_help
  35.     end
  36.     # 更新游標矩形
  37.     update_cursor_rect
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 取得行數
  41.   #--------------------------------------------------------------------------
  42.   def row_max
  43.     # 由項目數和列數計算出行數
  44.     return (@item_max + @column_max - 1) / @column_max
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 取得開頭行
  48.   #--------------------------------------------------------------------------
  49.   def top_row
  50.     # 將視窗內容的傳送源 Y 座標、1 行的高 32 等分
  51.     return self.oy / 32
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 設定開頭行
  55.   #     row : 顯示開頭的行
  56.   #--------------------------------------------------------------------------
  57.   def top_row=(row)
  58.     # row 未滿 0 的場合更正為 0
  59.     if row < 0
  60.       row = 0
  61.     end
  62.     # row 超過 row_max - 1 的情況下更正為 row_max - 1
  63.     if row > row_max - 1
  64.       row = row_max - 1
  65.     end
  66.     # row 1 行高的 32 倍、視窗內容的傳送源 Y 座標
  67.     self.oy = row * 32
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 獲取 1 頁可以顯示的行數
  71.   #--------------------------------------------------------------------------
  72.   def page_row_max
  73.     # 視窗的高度,設定畫面的高度減去 32 ,除以 1 行的高度 32
  74.     if $sai_row == nil
  75.     return (self.height - 32) / 32#預設值
  76.     else
  77.     return $sai_row
  78.     end
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 獲取 1 頁可以顯示的項目數
  82.   #--------------------------------------------------------------------------
  83.   def page_item_max
  84.     # 將行數 page_row_max 乘上列數 @column_max
  85.     return page_row_max * @column_max#預設值
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 提示視窗的設定
  89.   #     help_window : 新的提示視窗
  90.   #--------------------------------------------------------------------------
  91.   def help_window=(help_window)
  92.     @help_window = help_window
  93.     # 更新提示文字 (由 update_help 定義了繼承的目標)
  94.     if self.active and @help_window != nil
  95.       update_help
  96.     end
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 更新游標矩形
  100.   #--------------------------------------------------------------------------
  101.   def update_cursor_rect
  102.     # 游標位置不滿 0 的情況下
  103.     if @index < 0
  104.       self.cursor_rect.empty
  105.       return
  106.     end
  107.     # 取得當前的行
  108.     row = @index / @column_max
  109.     # 當前行被顯示開頭行前面的情況下
  110.     if row < self.top_row
  111.       # 從當前行向開頭行捲動
  112.       self.top_row = row
  113.     end
  114.     # 當前行被顯示末尾行之後的情況下
  115.     if row > self.top_row + (self.page_row_max - 1)
  116.       # 從當前行向末尾捲動
  117.       self.top_row = row - (self.page_row_max - 1)
  118.     end
  119.     # 計算游標的寬度
  120.     cursor_width = self.width / @column_max - 32
  121.     # 計算游標座標
  122.     x = @index % @column_max * (cursor_width + 32)
  123.     y = @index / @column_max * 32 - self.oy
  124.     # 更新游標矩形
  125.     self.cursor_rect.set(x, y, cursor_width, 32)
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 更新畫面
  129.   #--------------------------------------------------------------------------
  130.   def update
  131.     super
  132.     # 可以移動光標的情況下
  133.     if self.active and @item_max > 0 and @index >= 0
  134.       # 方向鍵下被按下的情況下
  135.       if Input.repeat?(Input::DOWN)
  136.         # 列數不是 1 並且方向鍵的下的按下狀態不是重複的情況、
  137.         # 或游標位置在(項目數-列數)之前的情況下
  138.         if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
  139.            @index < @item_max - @column_max
  140.           # 游標向下移動
  141.           $game_system.se_play($data_system.cursor_se)
  142.           @index = (@index + @column_max) % @item_max
  143.         end
  144.       end
  145.       # 方向鍵上被按下的情況下
  146.       if Input.repeat?(Input::UP)
  147.         # 列數不是 1 並且方向鍵的下的按下狀態不是重複的情況、
  148.         # 或游標位置在列之後的情況下
  149.         if (@column_max == 1 and Input.trigger?(Input::UP)) or
  150.            @index >= @column_max
  151.           # 游標向上移動
  152.           $game_system.se_play($data_system.cursor_se)
  153.           @index = (@index - @column_max + @item_max) % @item_max
  154.         end
  155.       end
  156. =begin
  157.       # 方向鍵右被按下的情況下
  158.       if Input.repeat?(Input::RIGHT)
  159.         # 列數為 2 以上並且、游標位置在(項目數 - 1)之前的情況下
  160.         if @column_max >= 2 and @index < @item_max - 1
  161.           # 游標向右移動
  162.           $game_system.se_play($data_system.cursor_se)
  163.           @index += 1
  164.         end
  165.       end
  166.       # 方向鍵左被按下的情況下
  167.       if Input.repeat?(Input::LEFT)
  168.         # 列數為 2 以上並且、游標位置在 0 之後的情況下
  169.         if @column_max >= 2 and @index > 0
  170.           # 游標向左移動
  171.           $game_system.se_play($data_system.cursor_se)
  172.           @index -= 1
  173.         end
  174.       end
  175. =end

  176. #纵向菜单循环
  177.      # 方向键右被按下的情况下
  178.      if Input.repeat?(Input::RIGHT)
  179.        if @column_max >= 2 and  @index == @item_max - 1
  180.          $game_system.se_play($data_system.cursor_se)
  181.          @index = -1
  182.        end
  183.        # 列数为 2 以上并且、光标位置在(项目数 - 1)之前的情况下
  184.        if @column_max >= 2 and @index < @item_max - 1
  185.          # 光标向右移动
  186.          $game_system.se_play($data_system.cursor_se)
  187.          @index += 1
  188.        end  
  189.      end
  190.      # 方向键左被按下的情况下
  191.      if Input.repeat?(Input::LEFT)
  192.        if  @column_max >= 2 and @index == 0
  193.          $game_system.se_play($data_system.cursor_se)
  194.          @index = @item_max
  195.        end
  196.        # 列数为 2 以上并且、光标位置在 0 之后的情况下
  197.        if @column_max >= 2 and @index > 0
  198.          # 光标向左移动
  199.          $game_system.se_play($data_system.cursor_se)
  200.          @index -= 1
  201.        end
  202.      end
  203. #纵向菜单循环

  204.       # R 鍵被按下的情況下
  205.       if Input.repeat?(Input::R)
  206.         # 顯示的最後行在資料中最後行上方的情況下
  207.         if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
  208.           # 游標向後移動一頁
  209.           $game_system.se_play($data_system.cursor_se)
  210.           @index = [@index + self.page_item_max, @item_max - 1].min
  211.           self.top_row += self.page_row_max
  212.         end
  213.       end
  214.       # L 鍵被按下的情況下
  215.       if Input.repeat?(Input::L)
  216.         # 顯示的開頭行在位置 0 之後的情況下
  217.         if self.top_row > 0
  218.           # 游標向前移動一頁
  219.           $game_system.se_play($data_system.cursor_se)
  220.           @index = [@index - self.page_item_max, 0].max
  221.           self.top_row -= self.page_row_max
  222.         end
  223.       end
  224.     end
  225.     # 更新提示文字 (由 update_help 定義了繼承的目標)
  226.     if self.active and @help_window != nil
  227.       update_help
  228.     end
  229.     # 更新游標矩形
  230.     update_cursor_rect
  231.   end
  232. end
复制代码
忧雪の伤 发表于 2012-5-12 11:53:30
不不不,请拿出 update_cursor_rect …… 要修改的是这个。
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-26 01:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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