Project1

标题: 关于制作下拉按钮的问题 [打印本页]

作者: zxc3824    时间: 2011-8-25 17:40
标题: 关于制作下拉按钮的问题
本帖最后由 zxc3824 于 2011-8-26 19:05 编辑



好了,大家也看到了,物品栏里面不止一个物品,我的工程是个鼠标系统的(四方向那个)

现在我想在物品栏里面加个
上下的按钮




能提供个有详细说明脚本就最好,1VIP啊,好歹也是1000经验或者4张好人卡啊dsu_plus_rewardpost_czw
作者: zx16589042    时间: 2011-8-26 16:00
控制 窗口的oy   加多少减多少自己试试

比如说   window.oy += 32
作者: zxc3824    时间: 2011-8-26 16:24
zx16589042 发表于 2011-8-26 16:00
控制 窗口的oy   加多少减多少自己试试

比如说   window.oy += 32

可是又如何能够将按钮加入进去,要是能够解决该问题,我加1VIP
作者: zx16589042    时间: 2011-8-26 18:00
真的很无奈,在你点击某个按得得时候处理
比如说那个窗口是  @window
点击上按钮的时候 @window.oy -= 32
点击下按钮的时候 @window.oy += 32
这样就做的移动了啊

作者: zxc3824    时间: 2011-8-26 18:32
zx16589042 发表于 2011-8-26 18:00
真的很无奈,在你点击某个按得得时候处理
比如说那个窗口是  @window
点击上按钮的时候 @window.oy -= 32

你好歹也得说明白点吧,我看着都迷迷糊糊的
作者: Wind2010    时间: 2011-8-26 18:53
zxc3824 发表于 2011-8-26 18:32
你好歹也得说明白点吧,我看着都迷迷糊糊的

首先要取消掉原鼠标脚本的只跳进下一行
然后在物品窗口弄两个Sprite,判断鼠标在其上方并按下时,执行:
物品窗口.top_row -=1 (向上)
物品窗口.top_row +=1 (向下)

嗯会不会之类的其他人看看吧
作者: 亿万星辰    时间: 2011-8-26 18:55
增加个滚轮控制吧。。。那样会变得比较新潮…
作者: zx16589042    时间: 2011-8-30 09:52
本帖最后由 zx16589042 于 2011-8-30 09:53 编辑

需要的话我下次发个范例?(带滑轮的)
作者: 后知后觉    时间: 2011-8-30 10:27
几个月前做姜太公的小岛的关卡编辑器的时候我用的方法是鼠标位置自动触发窗口滚动...
滚轮嘛.有滚轮的话感觉会很好.但是现在是不是所有的鼠标都带滚轮有待考证......
反正以前有些鼠标就没有滚轮.只做滚轮的话.那没有滚轮的鼠标的玩家就.........(去买个有滚轮的←PIA)
作者: zxc3824    时间: 2011-8-30 12:16
后知后觉 发表于 2011-8-30 10:27
几个月前做姜太公的小岛的关卡编辑器的时候我用的方法是鼠标位置自动触发窗口滚动...
滚轮嘛.有滚轮的话感 ...

那斑竹大大是不是提供个范例?
作者: 后知后觉    时间: 2011-8-31 17:54
做了个按钮式的.范例只有核心部分和物品菜单的.
装备、技能、商店的没做
窗口增加翻页按钮.rar (261.1 KB, 下载次数: 33)
核心部分是拿 Window_Selectable 改的

  1. #==============================================================================
  2. # ■ 此脚本来自 www.66rpg.com 使用和转载时请保留此信息
  3. =begin
  4.       功能:给窗口增加翻页按钮
  5.       作者:后知后觉 2011-8-31
  6.       说明:请自备 鼠标脚本(whbm)
  7.             把此核心部分放在 Window_Base 的下面 最好和他挨着
  8.             把需要有这样效果的窗口将其父类设置为 Window_MouseSelectable
  9.             然后在相关 Scene 增加对 窗口实例的 hzhj_state 属性判断
  10.             如果为 1 则是向上翻页 对窗口实例掉用 up_page 即可
  11.             如果为 2 则是向下翻页 对窗口实例调用 down_page 即可
  12.             还可以在窗口初始化后调用 make_rect(x1, y1, x2, y2)
  13.             参数可以省略 省略则为默认值 这是在设置翻页图标的位置
  14.             是相对于本窗口的坐标位置
  15.             如果你的窗口在运行中进行了移动(x y变化了)
  16.             或者是窗口大小被改变了(width、height)
  17.             都最好再调用一次 make_rect 来更新数据
  18. =end
  19. #==============================================================================
  20. #==============================================================================
  21. # ■ Window_MouseSelectable
  22. #==============================================================================

  23. class Window_MouseSelectable < Window_Base
  24.   UpBitmap = "Graphics/Icons/wdup.png"
  25.   DnBitmap = "Graphics/Icons/wddn.png"
  26.   #--------------------------------------------------------------------------
  27.   # ● 定义实例变量
  28.   #--------------------------------------------------------------------------
  29.   attr_reader   :index                    # 光标位置
  30.   attr_reader   :help_window              # 帮助窗口
  31.   attr_reader :hzhj_state
  32.   #--------------------------------------------------------------------------
  33.   # ● 初始画对像
  34.   #--------------------------------------------------------------------------
  35.   def initialize(x, y, width, height)
  36.     super(x, y, width, height)
  37.     @item_max = 1
  38.     @column_max = 1
  39.     @index = -1
  40.     @up_sprite = Sprite.new
  41.     @dn_sprite = Sprite.new
  42.     @up_sprite.bitmap = Bitmap.new(UpBitmap)
  43.     @dn_sprite.bitmap = Bitmap.new(DnBitmap)
  44.     @up_sprite.z = self.z + 2
  45.     @dn_sprite.z = self.z + 2
  46.     make_rect(*@hzhj_xy)
  47.     @hzhj_state = 0
  48.     @up_sprite.visible = self.visible
  49.     @dn_sprite.visible = self.visible
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 设置光标的位置
  53.   #     index : 新的光标位置
  54.   #--------------------------------------------------------------------------
  55.   def index=(index)
  56.     @index = index
  57.     # 刷新帮助文本 (update_help 定义了继承目标)
  58.     if self.active and @help_window != nil
  59.       update_help
  60.     end
  61.     # 刷新光标矩形
  62.     update_cursor_rect
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 获取行数
  66.   #--------------------------------------------------------------------------
  67.   def row_max
  68.     # 由项目数和列数计算出行数
  69.     return (@item_max + @column_max - 1) / @column_max
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 获取开头行
  73.   #--------------------------------------------------------------------------
  74.   def top_row
  75.     # 将窗口内容的传送源 Y 坐标、1 行的高 32 等分
  76.     return self.oy / 32
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 设置开头行
  80.   #     row : 显示开头的行
  81.   #--------------------------------------------------------------------------
  82.   def top_row=(row)
  83.     # row 未满 0 的场合更正为 0
  84.     if row < 0
  85.       row = 0
  86.     end
  87.     # row 超过 row_max - 1 的情况下更正为 row_max - 1
  88.     if row > row_max - 1
  89.       row = row_max - 1
  90.     end
  91.     # row 1 行高的 32 倍、窗口内容的传送源 Y 坐标
  92.     self.oy = row * 32
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 获取 1 页可以显示的行数
  96.   #--------------------------------------------------------------------------
  97.   def page_row_max
  98.     # 窗口的高度,设置画面的高度减去 32 ,除以 1 行的高度 32
  99.     return (self.height - 32) / 32
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 获取 1 页可以显示的项目数
  103.   #--------------------------------------------------------------------------
  104.   def page_item_max
  105.     # 将行数 page_row_max 乘上列数 @column_max
  106.     return page_row_max * @column_max
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 帮助窗口的设置
  110.   #     help_window : 新的帮助窗口
  111.   #--------------------------------------------------------------------------
  112.   def help_window=(help_window)
  113.     @help_window = help_window
  114.     # 刷新帮助文本 (update_help 定义了继承目标)
  115.     if self.active and @help_window != nil
  116.       update_help
  117.     end
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● 更新光标举行
  121.   #--------------------------------------------------------------------------
  122.   def update_cursor_rect
  123.     if @index < 0
  124.       self.cursor_rect.empty
  125.       return
  126.     end
  127.     row = @index / @column_max
  128.     if row < self.top_row
  129.       self.top_row = row
  130.     end
  131.     if row > self.top_row + (self.page_row_max - 1)
  132.       self.top_row = row - (self.page_row_max - 1)
  133.     end
  134.     cursor_width = self.width / @column_max - 32
  135.     x = @index % @column_max * (cursor_width + 32)
  136.     y = @index / @column_max * 32 - self.oy
  137.     self.cursor_rect.set(x, y, cursor_width, 32)
  138.   end
  139.   def make_rect(hux = nil, huy = nil, hdx = nil, hdy = nil)
  140.     if hux.nil?
  141.       upx = self.x + self.width / 4
  142.     else
  143.       upx = self.x + hux
  144.     end
  145.     if huy.nil?
  146.       upy = self.y + self.height - @up_sprite.bitmap.height
  147.     else
  148.       upy = self.y + huy
  149.     end
  150.     upw = [upx + @up_sprite.bitmap.width, self.x + self.width].min
  151.     uph = [upy + @up_sprite.bitmap.height, self.y + self.height].min
  152.     upxr = [upx, self.x].max
  153.     upyr = [upy, self.y].max
  154.     @up_rect = Rect.new(upxr, upyr, upw, uph)
  155.    
  156.     if hdx.nil?
  157.       dnx = self.x + self.width - self.width / 4
  158.     else
  159.       dnx = self.x + hdx
  160.     end
  161.     if hdy.nil?
  162.       dny = self.y + self.height - @dn_sprite.bitmap.height
  163.     else
  164.       dny = self.y + hdy
  165.     end
  166.     dnw = [dnx + @dn_sprite.bitmap.width, self.x + self.width].min
  167.     dnh = [dny + @dn_sprite.bitmap.height, self.y + self.height].min
  168.     dnxr = [dnx, self.x].max
  169.     dnyr = [dny, self.y].max
  170.     @dn_rect = Rect.new(dnxr, dnyr, dnw, dnh)
  171.    
  172.     @up_sprite.x = upx
  173.     @up_sprite.y = upy
  174.     @dn_sprite.x = dnx
  175.     @dn_sprite.y = dny
  176.   end
  177.   def update
  178.     super
  179.     @up_sprite.update
  180.     @dn_sprite.update
  181.     if self.active and @item_max > 0 and @index >= 0
  182.       mx,my = Mouse.get_mouse_pos
  183.       if mx.between?(@up_rect.x, @up_rect.width) and my.between?(@up_rect.y, @up_rect.height)
  184.         if @hzhj_state != 1
  185.           @hzhj_state = 1
  186.           @up_sprite.tone.set(64, 64, 64)
  187.           @dn_sprite.tone.set(0, 0, 0)
  188.         end
  189.         return
  190.       elsif mx.between?(@dn_rect.x, @dn_rect.width) and my.between?(@dn_rect.y, @dn_rect.height)
  191.         if @hzhj_state != 2
  192.           @hzhj_state = 2
  193.           @up_sprite.tone.set(0, 0, 0)
  194.           @dn_sprite.tone.set(64, 64, 64)
  195.         end
  196.         return
  197.       else
  198.         if @hzhj_state != 0
  199.           @hzhj_state = 0
  200.           @up_sprite.tone.set(0, 0, 0)
  201.           @dn_sprite.tone.set(0, 0, 0)
  202.         end
  203.       end
  204.       now_index = @index
  205.       start_index = top_row * @column_max
  206.       end_index = (top_row + page_row_max) * @column_max
  207.       for i in start_index..end_index
  208.         if i >= @item_max or i == end_index
  209.           self.index = now_index
  210.           break
  211.         end
  212.         @index = i
  213.         update_cursor_rect
  214.         sx = self.x + 16 + self.cursor_rect.x
  215.         sy = self.y + 16 + self.cursor_rect.y
  216.         ex = sx + self.cursor_rect.width
  217.         ey = sy + self.cursor_rect.height
  218.         if mx.between?(sx, ex) and my.between?(sy, ey)
  219.           if @index != now_index
  220.             $game_system.se_play($data_system.cursor_se)
  221.           end
  222.           break
  223.         end
  224.       end
  225.       if Input.repeat?(Input::DOWN)
  226.         if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
  227.            @index < @item_max - @column_max
  228.           $game_system.se_play($data_system.cursor_se)
  229.           @index = (@index + @column_max) % @item_max
  230.         end
  231.       end
  232.       if Input.repeat?(Input::UP)
  233.         if (@column_max == 1 and Input.trigger?(Input::UP)) or
  234.            @index >= @column_max
  235.           $game_system.se_play($data_system.cursor_se)
  236.           @index = (@index - @column_max + @item_max) % @item_max
  237.         end
  238.       end
  239.       if Input.repeat?(Input::RIGHT)
  240.         if @column_max >= 2 and @index < @item_max - 1
  241.           $game_system.se_play($data_system.cursor_se)
  242.           @index += 1
  243.         end
  244.       end
  245.       if Input.repeat?(Input::LEFT)
  246.         if @column_max >= 2 and @index > 0
  247.           $game_system.se_play($data_system.cursor_se)
  248.           @index -= 1
  249.         end
  250.       end
  251.       if Input.repeat?(Input::R)
  252.         if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
  253.           $game_system.se_play($data_system.cursor_se)
  254.           @index = [@index + self.page_item_max, @item_max - 1].min
  255.           self.top_row += self.page_row_max
  256.         end
  257.       end
  258.       if Input.repeat?(Input::L)
  259.         if self.top_row > 0
  260.           $game_system.se_play($data_system.cursor_se)
  261.           @index = [@index - self.page_item_max, 0].max
  262.           self.top_row -= self.page_row_max
  263.         end
  264.       end
  265.     end
  266.     if self.active and @help_window != nil
  267.       update_help
  268.     end
  269.     update_cursor_rect
  270.   end
  271.   def dispose
  272.     @up_sprite.bitmap.dispose
  273.     @up_sprite.dispose
  274.     @dn_sprite.bitmap.dispose
  275.     @dn_sprite.dispose
  276.     super
  277.   end
  278.   def up_page
  279.     if self.top_row > 0
  280.       $game_system.se_play($data_system.cursor_se)
  281.       @index = [@index - self.page_item_max, 0].max
  282.       self.top_row -= self.page_row_max
  283.     end
  284.   end
  285.   def down_page
  286.     if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
  287.       $game_system.se_play($data_system.cursor_se)
  288.       @index = [@index + self.page_item_max, @item_max - 1].min
  289.       self.top_row += self.page_row_max
  290.     end
  291.   end
  292.   def visible=(visible)
  293.     super(visible)
  294.     @up_sprite.visible = visible
  295.     @dn_sprite.visible = visible
  296.   end
  297. end

复制代码

作者: zxc3824    时间: 2011-9-4 16:49
后知后觉 发表于 2011-8-31 17:54
做了个按钮式的.范例只有核心部分和物品菜单的.
装备、技能、商店的没做




一插入工程就这样
作者: 后知后觉    时间: 2011-9-5 00:16
你的工程不只一个地方定义过 Window_Item
因为是改了这个窗口类的父类 所以要把每个定义的地方都改过来
具体搜索
  1. class Window_Item
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1