赞 | 0 |
VIP | 14 |
好人卡 | 0 |
积分 | 32 |
经验 | 9402 |
最后登录 | 2022-11-16 |
在线时间 | 161 小时 |
Lv3.寻梦者
- 梦石
- 3
- 星屑
- 178
- 在线时间
- 161 小时
- 注册时间
- 2010-9-30
- 帖子
- 114
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 某死灵法师 于 2014-7-28 14:37 编辑
有没有发现RMXP自带的数值输入处理好坑!!
上下左右操作什么的好麻烦!!
于是这个强化版数值输入处理脚本诞生了……
使用方法:替换原来的Window_InputNumber
功能:数字键直接输入(大小键盘均支持),backspace消掉上一格,delete消掉当前格,原本的上下左右依然保留
注:需要全键盘脚本- #==============================================================================
- # ■ Window_InputNumber
- #------------------------------------------------------------------------------
- # 信息窗口内部使用、输入数值的窗口强化版 by司令死灵法师
- #==============================================================================
- class Window_InputNumber < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # digits_max : 位数
- #--------------------------------------------------------------------------
- def initialize(digits_max)
- @digits_max = digits_max
- @number = 0
- # 从数字的幅度计算(假定与 0~9 等幅)光标的幅度
- dummy_bitmap = Bitmap.new(32, 32)
- @cursor_width = dummy_bitmap.text_size("0").width + 8
- dummy_bitmap.dispose
- super(0, 0, @cursor_width * @digits_max + 32, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- self.z += 9999
- self.opacity = 0
- @index = 0
- refresh
- update_cursor_rect
- end
- #--------------------------------------------------------------------------
- # ● 取得数值
- #--------------------------------------------------------------------------
- def number
- return @number
- end
- #--------------------------------------------------------------------------
- # ● 设置数值
- # number : 新的数值
- #--------------------------------------------------------------------------
- def number=(number)
- @number = [[number, 0].max, 10 ** @digits_max - 1].min
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 更新光标矩形
- #--------------------------------------------------------------------------
- def update_cursor_rect
- self.cursor_rect.set(@index * @cursor_width, 0, @cursor_width, 32)
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- super
- #按下小键盘数字键
- 0x60.upto(0x69) do |key|
- if Kboard.repeat?(key)
- $game_system.se_play($data_system.cursor_se)
- add_number_in(key - 0x60)
- #光标右移一格
- if @digits_max >= 2
- @index = (@index + 1) % @digits_max
- end
- refresh
- end
- end
- #按下大键盘数字键
- 0x30.upto(0x39) do |key|
- if Kboard.repeat?(key)
- $game_system.se_play($data_system.cursor_se)
- add_number_in(key - 0x30)
- #光标右移一格
- if @digits_max >= 2
- @index = (@index + 1) % @digits_max
- end
- refresh
- end
- end
- #按下backspace,消除上一格
- if Kboard.repeat?($R_Key_BACK)
- $game_system.se_play($data_system.cancel_se)
- #光标左移一格
- if @digits_max >= 2
- @index = (@index + @digits_max - 1) % @digits_max
- end
- add_number_in(0)
- refresh
- end
- #按下delete,消除当前格
- if Kboard.repeat?($R_Key_DELETE)
- $game_system.se_play($data_system.cancel_se)
- add_number_in(0)
- refresh
- end
- # 方向键上
- if Kboard.repeat?($R_Key_UP)
- $game_system.se_play($data_system.cursor_se)
- # 取得现在位置的数字位数
- place = 10 ** (@digits_max - 1 - @index)
- n = @number / place % 10
- @number -= n * place
- n = (n + 1) % 10
- # 再次设置现在位的数字
- @number += n * place
- refresh
- end
- # 方向键下
- if Kboard.repeat?($R_Key_DOWN)
- $game_system.se_play($data_system.cursor_se)
- # 取得现在位置的数字位数
- place = 10 ** (@digits_max - 1 - @index)
- n = @number / place % 10
- @number -= n * place
- n = (n - 1) % 10
- # 再次设置现在位的数字
- @number += n * place
- refresh
- end
- # 方向键左
- if Kboard.repeat?($R_Key_LEFT)
- if @digits_max >= 2
- $game_system.se_play($data_system.cursor_se)
- @index = (@index + @digits_max - 1) % @digits_max
- end
- end
- # 方向键右
- if Kboard.repeat?($R_Key_RIGHT)
- if @digits_max >= 2
- $game_system.se_play($data_system.cursor_se)
- @index = (@index + 1) % @digits_max
- end
- end
- update_cursor_rect
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- self.contents.font.color = normal_color
- s = sprintf("%0*d", @digits_max, @number)
- for i in 0...@digits_max
- self.contents.draw_text(i * @cursor_width + 4, 0, 32, 32, s[i,1])
- end
- end
- #--------------------------------------------------------------------------
- # ● 处理当前位置的数值输入
- #--------------------------------------------------------------------------
- def add_number_in(in_number)
- place = 10 ** (@digits_max - 1 - @index)
- n = @number / place % 10
- @number -= n * place
- n = in_number
- @number += n * place
- end
- end
- #==============================================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #==============================================================================
复制代码 再附上全键盘脚本: |
评分
-
查看全部评分
|