Project1

标题: 干掉默认系统最后一点日文——软键盘姓名输入框 [打印本页]

作者: SailCat    时间: 2014-2-23 03:46
标题: 干掉默认系统最后一点日文——软键盘姓名输入框
本帖最后由 fux2 于 2014-2-28 12:51 编辑

原版RMXP系统中的姓名输入功能是日文的,很不方便,这里改成软键盘的形式

配合鼠标脚本操作会比较舒服

使用方法:复制以下脚本插入到Main之前,然后用事件的输入名称处理即可看到效果。
(先@Index 以避免脚本出错 by fux2

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_NameInput
  3. #------------------------------------------------------------------------------
  4. #  输入名称的画面、文字选择窗口。
  5. #==============================================================================
  6.  
  7. class Window_NameInput < Window_Base
  8.   CHARACTER_TABLE_NORMAL =
  9.   [
  10.     "Esc","1","2","3","4","5","6","7","8","9","0","-","=","<-Bksp",
  11.     "`","q","w","e","r","t","y","u","i","o","p","[","]","\\",
  12.     "CAPS","a","s","d","f","g","h","j","k","l",";","'","Enter",
  13.     "Shift","z","x","c","v","b","n","m",",",".","/","Shift",
  14.                             " "
  15.   ]
  16.   CHARACTER_TABLE_CAPS =
  17.   [
  18.     "Esc","1","2","3","4","5","6","7","8","9","0","-","=","<-Bksp",
  19.     "`","Q","W","E","R","T","Y","U","I","O","P","[","]","\\",
  20.     "caps","A","S","D","F","G","H","J","K","L",";","'","Enter",
  21.     "Shift","Z","X","C","V","B","N","M",",",".","/","Shift",
  22.                             " "
  23.   ]
  24.   CHARACTER_TABLE_SHIFT =
  25.   [
  26.     "Esc","!","@","#","$","%","^","&","*","(",")","_","+","<-Bksp",
  27.     "~","Q","W","E","R","T","Y","U","I","O","P","{","}","|",
  28.     "CAPS","A","S","D","F","G","H","J","K","L",":","\"","Enter",
  29.     "[Shift]","Z","X","C","V","B","N","M","<",">","?","[Shift]",
  30.                             " "
  31.   ]
  32.   CHARACTER_TABLE_CAPS_SHIFT =
  33.   [
  34.     "Esc","~","!","@","#","$","%","^","&","*","(",")","_","+","<-Bksp",
  35.     "~","q","w","e","r","t","y","u","i","o","p","{","}","|",
  36.     "caps","a","s","d","f","g","h","j","k","l",":","\"","Enter",
  37.     "[Shift]","z","x","c","v","b","n","m","<",">","?","[Shift]",
  38.                             " "
  39.   ]
  40.   attr_accessor   :caps               # 是否大写锁定
  41.   attr_accessor   :shift              # 是否上档
  42.   #--------------------------------------------------------------------------
  43.   # ● 初始化对像
  44.   #--------------------------------------------------------------------------
  45.   def initialize
  46.     super(0, 128, 640, 352)
  47.     self.contents = Bitmap.new(width - 32, height - 32)
  48.     @index = 0
  49.     @caps = false
  50.     @shift = false
  51.     @last_index = 0
  52.     refresh
  53.     update_cursor_rect
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 获取文字
  57.   #--------------------------------------------------------------------------
  58.   def character(id = -1)
  59.     id = @index if id == -1
  60.     if @caps
  61.       return @shift ? CHARACTER_TABLE_CAPS_SHIFT[id] : CHARACTER_TABLE_CAPS[id]
  62.     else
  63.       return @shift ? CHARACTER_TABLE_SHIFT[id] : CHARACTER_TABLE_NORMAL[id]
  64.     end
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 获取按钮位置
  68.   #--------------------------------------------------------------------------
  69.   def key_pos(id)
  70.     x = y = w = 0
  71.     case id
  72.     when 0..12 # Esc 1 ... =
  73.       x = 4 + id * 40
  74.       y = 32
  75.       w = 40
  76.     when 13 # 退格
  77.       x = 524
  78.       y = 32
  79.       w = 80
  80.     when 14..27 # ` Q W ... \
  81.       x = 24 + (id - 14) * 40
  82.       y = 82
  83.       w = 40
  84.     when 28 # 大写
  85.       x = 4
  86.       y = 132
  87.       w = 80
  88.     when 29..39 # A S ... '
  89.       x = 84 + (id - 29) * 40
  90.       y = 132
  91.       w = 40
  92.     when 40 # 回车
  93.       x = 524
  94.       y = 132
  95.       w = 80
  96.     when 41 # LShift
  97.       x = 4
  98.       y = 182
  99.       w = 100
  100.     when 42..51 # Z X ... /
  101.       x = 104 + (id - 42) * 40
  102.       y = 182
  103.       w = 40
  104.     when 52 # RShift
  105.       x = 504
  106.       y = 182
  107.       w = 100
  108.     when 53 # 空格
  109.       x = 184
  110.       y = 232
  111.       w = 280
  112.     end
  113.     return [x, y, w]
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 刷新
  117.   #--------------------------------------------------------------------------
  118.   def refresh
  119.     self.contents.clear
  120.     for i in 0..53
  121.       pos = key_pos(i)
  122.       self.contents.draw_text(pos[0], pos[1], pos[2], 40, character(i), 1)
  123.     end
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 刷新光标矩形
  127.   #--------------------------------------------------------------------------
  128.   def update_cursor_rect
  129.     pos = key_pos(@index)
  130.     self.cursor_rect.set(pos[0], pos[1], pos[2], 40)
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 刷新画面
  134.   #--------------------------------------------------------------------------
  135.   def update
  136.     super
  137.     # 光标下
  138.     if Input.repeat?(Input::DOWN)
  139.       case @index
  140.       when 0..27
  141.         @index += 14
  142.         @index = [@index, 40].min
  143.       when 28..40
  144.         @index += 13
  145.         @index = [@index, 52].min
  146.       when 41..52
  147.         @last_index = @index
  148.         @index = 53
  149.       when 53
  150.         $game_system.se_play($data_system.buzzer_se)
  151.       end   
  152.       $game_system.se_play($data_system.cursor_se) unless @index == 53
  153.     end
  154.     # 光标上
  155.     if Input.repeat?(Input::UP)
  156.       case @index
  157.       when 0..13
  158.         $game_system.se_play($data_system.buzzer_se)
  159.       when 14..40
  160.         @index -= 14
  161.       when 41..52
  162.         @index -= 13
  163.       when 53
  164.         @index = @last_index
  165.       end   
  166.       $game_system.se_play($data_system.cursor_se) unless @index < 14
  167.     end
  168.     # 光标左
  169.     if Input.repeat?(Input::LEFT)
  170.       case @index
  171.       when 0, 14, 28, 41, 53
  172.         $game_system.se_play($data_system.buzzer_se)
  173.       else
  174.         $game_system.se_play($data_system.cursor_se)
  175.         @index -= 1
  176.       end
  177.     end
  178.     # 光标右
  179.     if Input.repeat?(Input::RIGHT)
  180.       case @index
  181.       when 13, 27, 40, 52, 53
  182.         $game_system.se_play($data_system.buzzer_se)
  183.       else
  184.         $game_system.se_play($data_system.cursor_se)
  185.         @index += 1
  186.       end   
  187.     end
  188.     update_cursor_rect
  189.   end
  190. end
  191. #==============================================================================
  192. # ■ Scene_Name
  193. #------------------------------------------------------------------------------
  194. #  处理名称输入画面的类。
  195. #==============================================================================
  196.  
  197. class Scene_Name
  198.   #--------------------------------------------------------------------------
  199.   # ● 刷新画面
  200.   #--------------------------------------------------------------------------
  201.   def update
  202.     # 刷新窗口
  203.     @edit_window.update
  204.     @input_window.update
  205.     # 按下 B 键的情况下
  206.     if Input.repeat?(Input::B)
  207.       # 光标位置为 0 的情况下
  208.       if @edit_window.index == 0
  209.         return
  210.       end
  211.       # 演奏取消 SE
  212.       $game_system.se_play($data_system.cancel_se)
  213.       # 删除文字
  214.       @edit_window.back
  215.       return
  216.     end
  217.     # 按下 C 键的情况下
  218.     if Input.trigger?(Input::C)
  219.       # 取得光标位置
  220.       case @input_window.character
  221.       # 光标位置为 [取消] 的情况下
  222.       when "Esc"
  223.         # 还原为默认名称
  224.         @edit_window.restore_default
  225.         return
  226.       # 光标位置为 [回车] 的情况下
  227.       when "Enter"
  228.         # 名称为空的情况下
  229.         if @edit_window.name == ""
  230.           # 还原为默认名称
  231.           @edit_window.restore_default
  232.           # 名称为空的情况下
  233.           if @edit_window.name == ""
  234.             # 演奏冻结 SE
  235.             $game_system.se_play($data_system.buzzer_se)
  236.             return
  237.           end
  238.           # 演奏确定 SE
  239.           $game_system.se_play($data_system.decision_se)
  240.           return
  241.         end
  242.         # 更改角色名称
  243.         @actor.name = @edit_window.name
  244.         # 演奏确定 SE
  245.         $game_system.se_play($data_system.decision_se)
  246.         # 切换到地图画面
  247.         $scene = Scene_Map.new
  248.         return
  249.       # 光标位置为 [退格] 的情况下
  250.       when "<-Bksp"
  251.       # 光标位置为 0 的情况下
  252.         if @edit_window.index == 0
  253.           return
  254.         end
  255.         # 演奏取消 SE
  256.         $game_system.se_play($data_system.cancel_se)
  257.         # 删除文字
  258.         @edit_window.back
  259.         return
  260.       # 光标位置为 [大写] 的情况下
  261.       when "CAPS", "caps"
  262.         # 演奏光标 SE
  263.         $game_system.se_play($data_system.cursor_se)
  264.         @input_window.caps = !@input_window.caps
  265.         @input_window.refresh
  266.         return
  267.       # 光标位置为 [上档] 的情况下
  268.       when "Shift", "[Shift]"
  269.         # 演奏光标 SE
  270.         $game_system.se_play($data_system.cursor_se)
  271.         @input_window.shift = !@input_window.shift
  272.         @input_window.refresh
  273.         return
  274.       # 其他情况下
  275.       else
  276.         # 光标位置为最大的情况下
  277.         if @edit_window.index == $game_temp.name_max_char
  278.           # 演奏冻结 SE
  279.           $game_system.se_play($data_system.buzzer_se)
  280.           return
  281.         end
  282.         # 文字为空的情况下
  283.         if @input_window.character == ""
  284.           # 演奏冻结 SE
  285.           $game_system.se_play($data_system.buzzer_se)
  286.           return
  287.         end
  288.         # 演奏确定 SE
  289.         $game_system.se_play($data_system.decision_se)
  290.         # 添加文字
  291.         @edit_window.add(@input_window.character)
  292.         # 取消上档
  293.         if @input_window.shift
  294.           @input_window.shift = false
  295.           @input_window.refresh
  296.         end
  297.         return
  298.       end
  299.     end
  300.   end
  301. end
  
作者: 天地有正气    时间: 2014-2-23 08:58
0.0大大的东西感觉很厉害!
作者: 浩然-Shuenhoy    时间: 2014-2-23 09:55
好的来看一下
作者: 晴兰    时间: 2014-2-23 09:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: imsy    时间: 2014-2-23 10:00
回复下看一看
作者: joe5491    时间: 2014-2-23 10:45
路過看看~
作者: yangjunyin2002    时间: 2014-2-23 11:01
什么玩意。。我不是XP党。
作者: 余烬之中    时间: 2014-2-23 11:41
我不是XP党   我只是看到【注册时间2005-10-15】于是过来请安
作者: 天地有正气    时间: 2014-2-23 11:52
0.0大大,弱弱的说一句,此区不是说禁止回复可见吗
作者: 赛露休斯    时间: 2014-2-23 12:09
回帖查看本帖隐藏内容
作者: 星星人    时间: 2014-2-23 15:42
感觉很厉害!
作者: heiwang1997    时间: 2014-2-23 16:33
本帖最后由 heiwang1997 于 2014-2-23 16:35 编辑

@忧雪の伤  去掉回复可见吧  




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