赞 | 8 |
VIP | 1 |
好人卡 | 6 |
积分 | 204 |
经验 | 289801 |
最后登录 | 2022-6-2 |
在线时间 | 88 小时 |
Lv5.捕梦者 御灵的宠物
- 梦石
- 12
- 星屑
- 8438
- 在线时间
- 88 小时
- 注册时间
- 2006-12-11
- 帖子
- 3148
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
难道就没人发现站上的鼠标脚本都存在选项超过一页无法滚动的问题吗= =+只能用键盘控制……这样的话还不如直接用键盘呢……
今天更新了一下Window_Selectable,
这个东西的用途就是在选择项超过一页的时候,点击窗口外面自动往下滚动。看懂的也可以把点击范围限制在窗口的下/上方某个区域……甚至自制选项条……
原鼠标脚本出现那个BUG的原因是没有更改Window_Selectable的update里边控制选项滚动的部分,这样鼠标的移动到窗口最下边的时候,程序发现已经可以翻页了,就往下移动了光标。如果是键盘操作那么光标会停下来,然而鼠标判断index是用屏幕位置来判断的……也就是说,这个时候鼠标指着的index已经又往下移动了。于是程序又要命令光标往下移动……这个过程会一直反复,直到鼠标指向最后一页为止。
这个修改其实只是把判断滚动的东西移动到了update里- -,鼠标不在选项窗口内的时候点左键才能滚动,是向哪个方向滚动取决于鼠标的Y坐标是在窗口的上半部分还是下半部分……
本来想过其他修改方法,例如飞鱼在5楼说的加两个按键的方法=v=+不过这个好象是最省事的……MS冲突性也不高-v-+就这样了……
另外用了这个键盘就不能控制窗口滚动了~不过……有了鼠标还何必用键盘呢(被PIA……)
要用的可以直接替换鼠标脚本的相应位置……也就是class Window_Selectable那段~
- class Window_Selectable
- if @self_alias == nil
- alias self_update update
- @self_alias = true
- end
- def update
- #self.cursor_rect.empty
- self_update
- if self.active and @item_max > 0
- index_var = @index
- tp_index = @index
- mouse_x, mouse_y = Mouse.get_mouse_pos
- mouse_not_in_rect = true
- for i in 0...@item_max
- @index = i
- update_cursor_rect
- top_x = self.cursor_rect.x + self.x + 16
- top_y = self.cursor_rect.y + self.y + 16
- bottom_x = top_x + self.cursor_rect.width
- bottom_y = top_y + self.cursor_rect.height
- if (mouse_x > top_x) and (mouse_y > top_y) and
- (mouse_x < bottom_x) and (mouse_y < bottom_y)
- mouse_not_in_rect = false
- if tp_index != @index
- tp_index = @index
- $game_system.se_play($data_system.cursor_se)
- end
- break
- end
- end
- if mouse_not_in_rect
- # row = @index / @column_max
- # 当前行被显示开头行前面的情况下
- if self.top_row < row_max-page_row_max and Mouse.press?(Mouse::LEFT) and mouse_y>self.y+self.height/2
- self.top_row +=1
- end
- # 当前行被显示末尾行之后的情况下
- 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)
- # 从当前行向末尾滚动
- self.top_row -=1
- end
- @index = index_var
- if self.is_a?(Window_Target)
- @index=-3
- end
- update_cursor_rect
- Mouse.click_lock
- else
- Mouse.click_unlock
- end
- end
- end
- def update_cursor_rect
- # 光标位置不满 0 的情况下
- if @index < 0
- self.cursor_rect.empty
- return
- end
- # 获取当前的行
- row = @index / @column_max
- # 当前行被显示开头行前面的情况下
- if row < self.top_row
- # 从当前行向开头行滚动
- self.cursor_rect.empty
- return
- end
- # 当前行被显示末尾行之后的情况下
- if row > self.top_row + (self.page_row_max - 1)
- # 从当前行向末尾滚动
- self.cursor_rect.empty
- return
- end
- # 计算光标的宽
- cursor_width = self.width / @column_max - 32
- # 计算光标坐标
- x = @index % @column_max * (cursor_width + 32)
- y = @index / @column_max * 32 - self.oy
- # 更新光标矩形
- self.cursor_rect.set(x, y, cursor_width, 32)
- end
- end
复制代码 |
|