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

Project1

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

鼠标脚本选项页的滚动……

 关闭 [复制链接]

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

跳转到指定楼层
1
发表于 2008-2-19 21:47:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
难道就没人发现站上的鼠标脚本都存在选项超过一页无法滚动的问题吗= =+只能用键盘控制……这样的话还不如直接用键盘呢……
今天更新了一下Window_Selectable,
这个东西的用途就是在选择项超过一页的时候,点击窗口外面自动往下滚动。看懂的也可以把点击范围限制在窗口的下/上方某个区域……甚至自制选项条……

原鼠标脚本出现那个BUG的原因是没有更改Window_Selectable的update里边控制选项滚动的部分,这样鼠标的移动到窗口最下边的时候,程序发现已经可以翻页了,就往下移动了光标。如果是键盘操作那么光标会停下来,然而鼠标判断index是用屏幕位置来判断的……也就是说,这个时候鼠标指着的index已经又往下移动了。于是程序又要命令光标往下移动……这个过程会一直反复,直到鼠标指向最后一页为止。

这个修改其实只是把判断滚动的东西移动到了update里- -,鼠标不在选项窗口内的时候点左键才能滚动,是向哪个方向滚动取决于鼠标的Y坐标是在窗口的上半部分还是下半部分……
本来想过其他修改方法,例如飞鱼在5楼说的加两个按键的方法=v=+不过这个好象是最省事的……MS冲突性也不高-v-+就这样了……

另外用了这个键盘就不能控制窗口滚动了~不过……有了鼠标还何必用键盘呢(被PIA……)

要用的可以直接替换鼠标脚本的相应位置……也就是class Window_Selectable那段~


  1. class Window_Selectable
  2.   if @self_alias == nil
  3.     alias self_update update
  4.     @self_alias = true
  5.   end
  6.   def update
  7.     #self.cursor_rect.empty
  8.     self_update
  9.     if self.active and @item_max > 0
  10.       index_var = @index
  11.       tp_index = @index
  12.       mouse_x, mouse_y = Mouse.get_mouse_pos
  13.       mouse_not_in_rect = true
  14.       for i in 0...@item_max
  15.         @index = i
  16.         update_cursor_rect
  17.         top_x = self.cursor_rect.x + self.x + 16
  18.         top_y = self.cursor_rect.y + self.y + 16
  19.         bottom_x = top_x + self.cursor_rect.width
  20.         bottom_y = top_y + self.cursor_rect.height
  21.         if (mouse_x > top_x) and (mouse_y > top_y) and
  22.            (mouse_x < bottom_x) and (mouse_y < bottom_y)
  23.           mouse_not_in_rect = false
  24.           if tp_index != @index
  25.             tp_index = @index
  26.             $game_system.se_play($data_system.cursor_se)
  27.           end
  28.           break
  29.         end
  30.       end
  31.       if mouse_not_in_rect
  32.         #  row = @index / @column_max
  33.           # 当前行被显示开头行前面的情况下
  34.           if self.top_row < row_max-page_row_max and Mouse.press?(Mouse::LEFT) and mouse_y>self.y+self.height/2
  35.             self.top_row +=1
  36.           end
  37.           # 当前行被显示末尾行之后的情况下
  38.           if self.top_row > 0 and Mouse.press?(Mouse::LEFT) and mouse_y<=self.y+self.height/2#self.top_row + (self.page_row_max - 1)
  39.             # 从当前行向末尾滚动
  40.             self.top_row -=1
  41.           end
  42.         @index = index_var
  43.         if self.is_a?(Window_Target)
  44.           @index=-3
  45.         end
  46.         update_cursor_rect
  47.         Mouse.click_lock
  48.       else
  49.         Mouse.click_unlock               
  50.       end
  51.     end
  52.   end
  53.   def update_cursor_rect
  54.     # 光标位置不满 0 的情况下
  55.     if @index < 0
  56.       self.cursor_rect.empty
  57.       return
  58.     end
  59.     # 获取当前的行
  60.     row = @index / @column_max
  61.     # 当前行被显示开头行前面的情况下
  62.     if row < self.top_row
  63.       # 从当前行向开头行滚动
  64.       self.cursor_rect.empty
  65.       return
  66.     end
  67.     # 当前行被显示末尾行之后的情况下
  68.     if row > self.top_row + (self.page_row_max - 1)
  69.       # 从当前行向末尾滚动
  70.       self.cursor_rect.empty
  71.       return
  72.     end
  73.     # 计算光标的宽
  74.     cursor_width = self.width / @column_max - 32
  75.     # 计算光标坐标
  76.     x = @index % @column_max * (cursor_width + 32)
  77.     y = @index / @column_max * 32 - self.oy
  78.     # 更新光标矩形
  79.     self.cursor_rect.set(x, y, cursor_width, 32)
  80.   end
  81. end
复制代码
我的Lofter:http://nightoye.lofter.com/

头像被屏蔽

Lv1.梦旅人 (禁止发言)

心无天使

梦石
0
星屑
49
在线时间
0 小时
注册时间
2007-12-15
帖子
1016
2
发表于 2008-2-19 21:55:20 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-1-13
帖子
25
3
发表于 2008-2-19 22:02:23 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

4
 楼主| 发表于 2008-2-20 00:33:46 | 只看该作者
问题是不是每个鼠标都有滚轮=v=+
不过这东西只是随手写的,做个参考而已……
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
5
发表于 2008-2-20 00:43:50 | 只看该作者
这个……其实很早就有人问过,尝试解决过,不是很完美……因为增加了两个按扭=。=
LZ很强大
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-20
帖子
202
6
发表于 2008-2-20 00:57:57 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

7
 楼主| 发表于 2008-3-5 09:57:44 | 只看该作者
默默地顶上来一下。。。木有人处理这帖灭?
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

8
发表于 2008-3-5 18:11:59 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

9
 楼主| 发表于 2008-3-5 21:39:47 | 只看该作者
望LS,差不多吧。
然后用一个sprite放在鼠标的位置来伪它= =bbb
然后就是在window_selectable里判断它是否在选项那里~
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
10
发表于 2008-3-14 04:40:03 | 只看该作者
最好是可以选择鼠标和键盘...选择时键盘鼠标双使用...选择后支持单个....防止玩家没有键盘或鼠标..{/cy}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 04:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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