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

Project1

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

[原创发布] 干掉默认系统最后一点日文——软键盘姓名输入框

[复制链接]

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23206
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

跳转到指定楼层
1
发表于 2014-2-23 03:46:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 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
  

评分

参与人数 1星屑 +500 收起 理由
fux2 + 500 精品文章

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

2
发表于 2014-2-23 08:58:05 | 只看该作者
0.0大大的东西感觉很厉害!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
453
在线时间
343 小时
注册时间
2012-8-9
帖子
118
3
发表于 2014-2-23 09:55:31 | 只看该作者
好的来看一下
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

4
发表于 2014-2-23 09:56:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12329
在线时间
21823 小时
注册时间
2010-10-24
帖子
308
5
发表于 2014-2-23 10:00:56 | 只看该作者
回复下看一看
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
193 小时
注册时间
2013-3-24
帖子
448
6
发表于 2014-2-23 10:45:04 | 只看该作者
路過看看~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
196
在线时间
835 小时
注册时间
2012-9-16
帖子
1811
7
发表于 2014-2-23 11:01:39 | 只看该作者
什么玩意。。我不是XP党。

——旧坑欢迎戳
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

8
发表于 2014-2-23 11:41:44 | 只看该作者
我不是XP党   我只是看到【注册时间2005-10-15】于是过来请安
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

9
发表于 2014-2-23 11:52:38 | 只看该作者
0.0大大,弱弱的说一句,此区不是说禁止回复可见吗
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
帖子
643
10
发表于 2014-2-23 12:09:18 | 只看该作者
回帖查看本帖隐藏内容
最近在研究XAS
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-29 07:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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