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

Project1

 找回密码
 注册会员
搜索
楼主: hitlerson
打印 上一主题 下一主题

鼠标系统beta1#减肥更新版# by H

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
41 小时
注册时间
2008-3-5
帖子
2072
31
 楼主| 发表于 2008-6-5 09:02:19 | 只看该作者
重写了Seleteable
  1. #==============================================================================
  2. # ■ Window_Selectable
  3. #------------------------------------------------------------------------------
  4. #  拥有光标的移动以及滚动功能的窗口类。
  5. #==============================================================================

  6. class Window_Selectable_Cardhelp < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 定义实例变量
  9.   #--------------------------------------------------------------------------
  10.   attr_reader   :index                    # 光标位置
  11.   attr_reader   :help_window              # 帮助窗口
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始画对像
  14.   #     x      : 窗口的 X 坐标
  15.   #     y      : 窗口的 Y 坐标
  16.   #     width  : 窗口的宽
  17.   #     height : 窗口的高
  18.   #--------------------------------------------------------------------------
  19.   def initialize(x, y, width, height)
  20.     super(x, y, width, height)
  21.     @item_max = 1
  22.     @column_max = 6
  23.     @index = -1
  24.     @a = 0
  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 10
  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.     return 20
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 获取 1 页可以显示的项目数
  78.   #--------------------------------------------------------------------------
  79.   def page_item_max
  80.     # 将行数 page_row_max 乘上列数 @column_max
  81.     return page_row_max * @column_max
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 帮助窗口的设置
  85.   #     help_window : 新的帮助窗口
  86.   #--------------------------------------------------------------------------
  87.   def help_window=(help_window)
  88.     @help_window = help_window
  89.     # 刷新帮助文本 (update_help 定义了继承目标)
  90.     if self.active and @help_window != nil
  91.       update_help
  92.     end
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 更新光标举行
  96.   #--------------------------------------------------------------------------
  97.   def update_cursor_rect
  98.     x0 = Z::PWx0 ; y0 = Z::PWy0 #坐标偏量
  99.     # 光标位置不满 0 的情况下
  100.     if @index < 0
  101.       self.cursor_rect.empty
  102.       return
  103.     end
  104.     # 获取当前的行
  105.     row = @index / @column_max
  106.     # 计算光标的宽
  107.     cursor_width = 9
  108.     if @index == 10000
  109.       x, y = self.width - 40, -3
  110.       self.cursor_rect.set(x-3, y, 10, 15)
  111.     else
  112.       x, y = 34, 29 + 254 + @index * 16     # 计算光标坐标
  113.       self.cursor_rect.set(x-3, y, cursor_width, 9)   # 更新国标矩形
  114.     end
  115.    
  116.   end
  117.   #---------------------------------------------------------------------------
  118.   def inside(x0,y0,x1,y1)
  119.     if (@mouse_x > x0) and (@mouse_y > y0) and (@mouse_x < x1) and (@mouse_y < y1)
  120.       return true
  121.     else
  122.       return false
  123.     end
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 刷新画面
  127.   #--------------------------------------------------------------------------
  128.   def update
  129.     super
  130.     x = 22 ; y = 30
  131.     if self.active
  132.       if @item_max > 0   #鼠标刷新
  133.         @mouse_x, @mouse_y = Mouse.get_mouse_pos
  134.         tp_index = @index
  135.         mouse_not_in_rect = true
  136.         top_x = self.x + 43
  137.         top_y = self.y + 298
  138.         bottom_x = top_x + 13
  139.         bottom_y = top_y + 13
  140.         #----
  141.         for i in 0..3
  142.           if inside(top_x, top_y+16*i, bottom_x, bottom_y+16*i)
  143.             @index = i
  144.             mouse_not_in_rect = false
  145.             if tp_index != @index
  146.               tp_index = @index
  147.               @a = 0
  148.               $game_system.se_play($data_system.cursor_se)
  149.             end
  150.           end
  151.           if mouse_not_in_rect
  152.             @index = -1
  153.           end
  154.         end
  155.         #----
  156.         if inside(self.x + self.width - 32, self.y + 7, self.x + self.width - 16, self.y + 24)
  157.           @index = 10000
  158.           mouse_not_in_rect = false
  159.           if tp_index != @index
  160.             tp_index = @index
  161.             @a = 1
  162.             $game_system.se_play($data_system.cursor_se)
  163.           end
  164.           if mouse_not_in_rect
  165.             @index = -1
  166.           end
  167.         end
  168.         #----
  169.       end
  170.     end
  171.    
  172.     # 刷新帮助文本 (update_help 定义了继承目标)
  173.     if self.active and @help_window != nil
  174.       update_help
  175.     end
  176.     # 刷新光标矩形
  177.     update_cursor_rect
  178.   end
  179. end
复制代码


window_里面加上读取滚动条Y坐标的语句
  1.     if @item_max > 10
  2.       bitmap_gdt = RPG::Cache.picture("gundongtiao")
  3.       self.contents.blt(self.width - 42, 50+@lan1_y, bitmap_gdt, Rect.new(0, 0, 20, 100), 255)
  4.     end
复制代码


没什么花头的

其实这整个就是个大范例,WIN窗口层叠拖动效果,滚动条效果,物品拖动效果,快捷栏的实现。
要拿出来真不容易,MAP、WINDOW、SCENE、SELETEABLE都改光了
功能不全是有些SCENE还没改,现在给战斗搞的很疲惫,没心情搞这个了
你它囧一字母君谁记得……
当时那把剑离我的喉咙只有0.01工分。可是一柱香之后,这个女主人会深深的爱上我,虽然本人平生说了无数的谎话,可是这句最有效:“你应该这么做,我也应该死。
曾经有一取ID的机会放在我面前,我没有珍惜,等我失去的时候我才后悔莫及,人世间最痛苦的事莫过于此。你的剑在我的咽喉上割下去吧!不用再犹豫了!如果上天能够给我一个再来一次的机会,我绝对会取个汉字君。如果非要给这ID加点修饰的话,我希望是……红色加粗……

回复 支持 反对

使用道具 举报

Lv1.梦旅人

Poison·

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-30
帖子
2391
32
发表于 2008-6-5 18:58:35 | 只看该作者
很强大{/hx}``其实我也想要这个拖动窗口的效果```但``谁叫偶是脚本盲{/gg}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 15:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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