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

Project1

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

[已经过期] 怎么接受用户输入汉字

[复制链接]

Lv1.梦旅人

梦石
0
星屑
155
在线时间
0 小时
注册时间
2012-9-22
帖子
2
跳转到指定楼层
1
发表于 2012-10-3 10:17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在RPGmaker中怎么样跳出输入框,接受用户输入,然后再作出判断。

Lv1.梦旅人

梦石
0
星屑
48
在线时间
161 小时
注册时间
2012-8-2
帖子
118
2
发表于 2012-10-3 10:58:51 | 只看该作者
xp的话,用拼音脚本(我原来用过)(完美输入法),但其它的我就不知道啦
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

3
发表于 2012-10-3 12:29:10 | 只看该作者
  1. #==============================================================================
  2. # ■ Kernel
  3. #------------------------------------------------------------------------------
  4. #  该模块中定义了可供所有类使用的方法。Object 类中包含了该模块。
  5. #==============================================================================
  6. module Kernel
  7.   #--------------------------------------------------------------------------
  8.   # ● 需要的 Windows API 函数
  9.   #--------------------------------------------------------------------------
  10.   GetWindowThreadProcessId = Win32API.new("user32", "GetWindowThreadProcessId", "LP", "L")
  11.   GetWindow = Win32API.new("user32", "GetWindow", "LL", "L")
  12.   GetClassName = Win32API.new("user32", "GetClassName", "LPL", "L")
  13.   GetCurrentThreadId = Win32API.new("kernel32", "GetCurrentThreadId", "V", "L")
  14.   GetForegroundWindow = Win32API.new("user32", "GetForegroundWindow", "V", "L")
  15.   #--------------------------------------------------------------------------
  16.   # ● 获取窗口句柄
  17.   #--------------------------------------------------------------------------
  18.   def get_hWnd
  19.     # 获取调用线程(RM 的主线程)的进程标识
  20.     threadID = GetCurrentThreadId.call
  21.     # 获取 Z 次序中最靠前的窗口
  22.     hWnd = GetWindow.call(GetForegroundWindow.call, 0)
  23.     # 枚举所有窗口
  24.     while hWnd != 0
  25.       # 如果创建该窗口的线程标识匹配本线程标识
  26.       if threadID == GetWindowThreadProcessId.call(hWnd, 0)
  27.         # 分配一个 11 个字节的缓冲区
  28.         className = " " * 11
  29.         # 获取该窗口的类名
  30.         GetClassName.call(hWnd, className, 12)
  31.         # 如果匹配 RGSS Player 则跳出循环
  32.         break if className == "RGSS Player"
  33.       end
  34.       # 获取下一个窗口
  35.       hWnd = GetWindow.call(hWnd, 2)
  36.     end
  37.     return hWnd
  38.   end
  39. end
  40. #==============================================================================
  41. # ■ TextBox  by EngShun
  42. #------------------------------------------------------------------------------
  43. #  输入框的类。
  44. #==============================================================================
  45. class TextBox
  46.   #--------------------------------------------------------------------------
  47.   # ● 设置API
  48.   #--------------------------------------------------------------------------
  49.   CreateWindow = Win32API.new('user32','CreateWindowEx','lpplllllllll','l')
  50.   ShowWindow = Win32API.new('user32','ShowWindow','ll','l')
  51.   DestroyWindow = Win32API.new('user32','DestroyWindow','l','l')
  52.   GetWindowText = Win32API.new('user32','GetWindowText','lpl','l')
  53.   SetWindowText = Win32API.new("user32", "SetWindowText", "lp", "l")
  54.   GetWindowTextLength = Win32API.new('user32','GetWindowTextLength','l','l')
  55.   UpdateWindow = Win32API.new('user32','UpdateWindow','l','i')
  56.   SetFocus = Win32API.new('user32','SetFocus','l','l')
  57.   SendMessage = Win32API.new('user32','SendMessage','llll','l')
  58.   MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  59.   WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  60.   GetKeyState = Win32API.new("user32","GetAsyncKeyState",'I','I')
  61.   #--------------------------------------------------------------------------
  62.   # ● 定义实例变量
  63.   #--------------------------------------------------------------------------
  64.   attr_accessor :focus
  65.   #--------------------------------------------------------------------------
  66.   # ● 初始化
  67.   #--------------------------------------------------------------------------
  68.   def initialize(text = "",limit = 8,number=false)
  69.     c = 0x40011000
  70.     c = (c|0x00001000) if number
  71.     @window = CreateWindow.call(0, 'EDIT', u2s(text), c, 0, 480-22, 640, 22, get_hWnd, 0, 0, 0)
  72.     SendMessage.call(@window,0xC5,limit,0)
  73.     @focus = true
  74.     @disposed = false
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 释放
  78.   #--------------------------------------------------------------------------
  79.   def dispose
  80.     @disposed = true
  81.     DestroyWindow.call(@window)
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 刷新
  85.   #--------------------------------------------------------------------------
  86.   def update
  87.     return if !@focus or @disposed
  88.     UpdateWindow.call(@window)
  89.     SetFocus.call(@window)
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 获取内容
  93.   #--------------------------------------------------------------------------
  94.   def text
  95.     return if @disposed
  96.     l = GetWindowTextLength.call(@window)
  97.     str = "\0" * (l + 1)
  98.     GetWindowText.call(@window, str, l+1)
  99.     return s2u(str.delete("\0"))
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 更改内容
  103.   #--------------------------------------------------------------------------
  104.   def text=(str)
  105.     SetWindowText.call(@window, u2s(str))
  106.     return if @disposed
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 获取光标位置
  110.   #--------------------------------------------------------------------------
  111.   def sel_pos
  112.     return if @disposed
  113.     return (SendMessage.call(@window,0xB0,0,0) % 65535) / 2
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 设置光标位置
  117.   #--------------------------------------------------------------------------
  118.   def sel_pos=(i)
  119.     return if @disposed
  120.     SendMessage.call(@window,0xB1,i,i)
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 获取光标位置
  124.   #--------------------------------------------------------------------------
  125.   def limit
  126.     return if @disposed
  127.     return SendMessage.call(@window,0xD5,0,0)
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 设置光标位置
  131.   #--------------------------------------------------------------------------
  132.   def limit=(i)
  133.     return if @disposed
  134.     SendMessage.call(@window,0xC5,i,0)
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 是否按下回车键
  138.   #--------------------------------------------------------------------------
  139.   def press_enter?
  140.     return if @disposed
  141.     return (@focus and (GetKeyState.call(13) != 0))
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 转码:系统转UTF-8
  145.   #--------------------------------------------------------------------------
  146.   def s2u(text)
  147.     len = MultiByteToWideChar.call(0, 0, text, -1, nil, 0);
  148.     buf = "\0" * (len*2)
  149.     MultiByteToWideChar.call(0, 0, text, -1, buf, buf.size/2);
  150.     len = WideCharToMultiByte.call(65001, 0, buf, -1, nil, 0, nil, nil);
  151.     ret = "\0" * len
  152.     WideCharToMultiByte.call(65001, 0, buf, -1, ret, ret.size, nil, nil);
  153.     return ret.delete("\000")
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 转码:UTF-8转系统
  157.   #--------------------------------------------------------------------------
  158.   def u2s(text)
  159.     len = MultiByteToWideChar.call(65001, 0, text, -1, nil, 0);
  160.     buf = "\0" * (len*2)
  161.     MultiByteToWideChar.call(65001, 0, text, -1, buf, buf.size/2);
  162.     len = WideCharToMultiByte.call(0, 0, buf, -1, nil, 0, nil, nil);
  163.     ret = "\0" * len
  164.     WideCharToMultiByte.call(0, 0, buf, -1, ret, ret.size, nil, nil);
  165.     return ret.delete("\000")
  166.   end
  167.   private :u2s ,:s2u # 定义私有功能
  168. end
  169. #==============================================================================
  170. # ■ Sprite_TextBox  by EngShun
  171. #------------------------------------------------------------------------------
  172. #  显示输入框用的活动块。
  173. #==============================================================================
  174. class Sprite_TextBox < Sprite
  175.   #--------------------------------------------------------------------------
  176.   # ● 设置缓存的类
  177.   #--------------------------------------------------------------------------
  178.   Cache = Struct.new(:bc ,:fc ,:fs ,:text ,:sel_pos)
  179.   #--------------------------------------------------------------------------
  180.   # ● 定义实例变量
  181.   #--------------------------------------------------------------------------
  182.   attr_accessor :textbox
  183.   attr_accessor :back_color
  184.   #--------------------------------------------------------------------------
  185.   # ● 初始化
  186.   #--------------------------------------------------------------------------
  187.   def initialize(x = 0,y = 0,w = 128,h = 32,bc = Color.new(255,255,255),fc = Color.new(0,0,0),tb = TextBox.new)
  188.     super(nil)
  189.     self.x = x
  190.     self.y = y
  191.     self.bitmap = Bitmap.new(w,h)
  192.     self.bitmap.font.color = fc
  193.     @back_color = bc
  194.     @textbox = tb
  195.     @cache = Cache.new
  196.     refresh
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 刷新
  200.   #--------------------------------------------------------------------------
  201.   def update
  202.     super
  203.     return unless @textbox.focus
  204.     @textbox.update
  205.     if (self.bitmap.font.color != @cache.fc) or
  206.        (self.bitmap.font.size != @cache.fs) or
  207.        (@textbox.sel_pos != @cache.sel_pos) or
  208.        (@textbox.text != @cache.text) or
  209.        (@back_color != @cache.bc)
  210.       refresh
  211.     end
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 释放
  215.   #--------------------------------------------------------------------------
  216.   def dispose
  217.     self.bitmap.dispose
  218.     @textbox.dispose
  219.     super
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ● 内容刷新
  223.   #--------------------------------------------------------------------------
  224.   def refresh
  225.     @cache.fc = self.bitmap.font.color
  226.     @cache.fs = self.bitmap.font.size
  227.     @cache.sel_pos = @textbox.sel_pos
  228.     @cache.text = @textbox.text
  229.     @cache.bc = @back_color
  230.     w = self.bitmap.width
  231.     h = self.bitmap.height
  232.     self.bitmap.fill_rect(0,0,w,h,@back_color)
  233.     self.bitmap.draw_text(4,0,w-4,h,@textbox.text)
  234.     t = @textbox.text.scan(/./)[0,@textbox.sel_pos].join("")
  235.     s = self.bitmap.text_size(t).width
  236.     self.bitmap.draw_text((4 + s)-16,0,32,h,"|",1)
  237.   end
  238.   private :refresh # 设置私有功能
  239. end
  240. #==============================================================================
  241. # ■ Scene_Name
  242. #------------------------------------------------------------------------------
  243. #  处理名称输入画面的类。
  244. #==============================================================================
  245. class Scene_Name
  246.   #--------------------------------------------------------------------------
  247.   # ● 主处理
  248.   #--------------------------------------------------------------------------
  249.   def main
  250.     @actor = $game_actors[$game_temp.name_actor_id]
  251.     @window = Window_Base.new(0,176,640,128)
  252.     @window.contents = Bitmap.new(576,96)
  253.     @window.draw_actor_graphic(@actor, 64, 80)
  254.     @window.contents.draw_text(128,0,480,32,"请输入名称:")
  255.     @sprite_tb = Sprite_TextBox.new(144,240,464)
  256.     @sprite_tb.z = 500
  257.     @sprite_tb.textbox.limit = $game_temp.name_max_char
  258.     @sprite_tb.textbox.text = @actor.name
  259.     @sprite_tb.textbox.sel_pos = @actor.name.length
  260.     Graphics.transition
  261.     loop do
  262.       Graphics.update
  263.       Input.update
  264.       update
  265.       break if $scene != self
  266.     end
  267.     Graphics.freeze
  268.     @sprite_tb.dispose
  269.     @window.dispose
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 刷新画面
  273.   #--------------------------------------------------------------------------
  274.   def update
  275.     @sprite_tb.update
  276.     if @sprite_tb.textbox.press_enter?
  277.       if @sprite_tb.textbox.text == ""
  278.         $game_system.se_play($data_system.buzzer_se)
  279.         return
  280.       end
  281.       @actor.name = @sprite_tb.textbox.text
  282.       $scene = Scene_Map.new
  283.     end
  284.   end
  285. end
复制代码
就是这个脚本

评分

参与人数 1星屑 +132 收起 理由
hys111111 + 132 感谢回答

查看全部评分

[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
0 小时
注册时间
2012-9-22
帖子
2
4
 楼主| 发表于 2012-10-3 15:13:39 | 只看该作者
chd114 发表于 2012-10-3 12:29
就是这个脚本

该怎么使用呢,我看不懂呢,多谢回答!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3195
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

5
发表于 2012-10-3 15:25:49 | 只看该作者
myself105 发表于 2012-10-3 15:13
该怎么使用呢,我看不懂呢,多谢回答!

打开脚本编辑器,在main前面插入。

点评

你的反应真是······  发表于 2012-10-16 22:53
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-11 07:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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