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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: lanyuting
打印 上一主题 下一主题

[已经解决] 如何在给定的场合,让玩家输入文字答案

[复制链接]

Lv1.梦旅人

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
帖子
768
11
发表于 2014-7-12 18:36:38 | 只看该作者
写一个专用的scene,需要时调用出来就行了
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
329
在线时间
890 小时
注册时间
2009-10-12
帖子
1829
12
发表于 2014-7-13 09:24:05 | 只看该作者
https://rpg.blue/thread-363065-1-1.html

链接只是打个广告= =不过就是类似的功能呢

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
332 小时
注册时间
2013-7-6
帖子
356
13
发表于 2014-7-14 09:34:03 | 只看该作者
本帖最后由 wolves 于 2014-7-14 09:41 编辑

我有一个输入脚本比较不错,看看这个脚本:
(总共有四段,显示的位置在最下面)
第一个:获取窗口句柄
  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
复制代码
第二个:TextBox
  1. #==============================================================================
  2. # ■ TextBox  by EngShun
  3. #------------------------------------------------------------------------------
  4. #  输入框的类。
  5. #==============================================================================
  6. class TextBox
  7.   #--------------------------------------------------------------------------
  8.   # ● 设置API
  9.   #--------------------------------------------------------------------------
  10.   CreateWindow = Win32API.new('user32','CreateWindowEx','lpplllllllll','l')
  11.   ShowWindow = Win32API.new('user32','ShowWindow','ll','l')
  12.   DestroyWindow = Win32API.new('user32','DestroyWindow','l','l')
  13.   GetWindowText = Win32API.new('user32','GetWindowText','lpl','l')
  14.   SetWindowText = Win32API.new("user32", "SetWindowText", "lp", "l")
  15.   GetWindowTextLength = Win32API.new('user32','GetWindowTextLength','l','l')
  16.   UpdateWindow = Win32API.new('user32','UpdateWindow','l','i')
  17.   SetFocus = Win32API.new('user32','SetFocus','l','l')
  18.   SendMessage = Win32API.new('user32','SendMessage','llll','l')
  19.   MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  20.   WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  21.   GetKeyState = Win32API.new("user32","GetAsyncKeyState",'I','I')
  22.   #--------------------------------------------------------------------------
  23.   # ● 定义实例变量
  24.   #--------------------------------------------------------------------------
  25.   attr_accessor :focus
  26.   #--------------------------------------------------------------------------
  27.   # ● 初始化
  28.   #--------------------------------------------------------------------------
  29.   def initialize(text = "",limit = 8,number=false)
  30.     c = 0x40011000
  31.     c = (c|0x00001000) if number
  32.     [url=home.php?mod=space&uid=37298]@Window[/url] = CreateWindow.call(0, 'EDIT', u2s(text), c, 0, 480-22, 640, 22, get_hWnd, 0, 0, 0)
  33.     SendMessage.call(@window,0xC5,limit,0)
  34.     @focus = true
  35.     @disposed = false
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 释放
  39.   #--------------------------------------------------------------------------
  40.   def dispose
  41.     @disposed = true
  42.     DestroyWindow.call(@window)
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 刷新
  46.   #--------------------------------------------------------------------------
  47.   def update
  48.     return if !@focus or @disposed
  49.     UpdateWindow.call(@window)
  50.     SetFocus.call(@window)
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 获取内容
  54.   #--------------------------------------------------------------------------
  55.   def text
  56.     return if @disposed
  57.     l = GetWindowTextLength.call(@window)
  58.     str = "\0" * (l + 1)
  59.     GetWindowText.call(@window, str, l+1)
  60.     return s2u(str.delete("\0"))
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 更改内容
  64.   #--------------------------------------------------------------------------
  65.   def text=(str)
  66.     SetWindowText.call(@window, u2s(str))
  67.     return if @disposed
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 获取光标位置
  71.   #--------------------------------------------------------------------------
  72.   def sel_pos
  73.     return if @disposed
  74.     return (SendMessage.call(@window,0xB0,0,0) % 65535) / 2
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 设置光标位置
  78.   #--------------------------------------------------------------------------
  79.   def sel_pos=(i)
  80.     return if @disposed
  81.     SendMessage.call(@window,0xB1,i,i)
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 获取光标位置
  85.   #--------------------------------------------------------------------------
  86.   def limit
  87.     return if @disposed
  88.     return SendMessage.call(@window,0xD5,0,0)
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 设置光标位置
  92.   #--------------------------------------------------------------------------
  93.   def limit=(i)
  94.     return if @disposed
  95.     SendMessage.call(@window,0xC5,i,0)
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 是否按下回车键
  99.   #--------------------------------------------------------------------------
  100.   def press_enter?
  101.     return if @disposed
  102.     return (@focus and (GetKeyState.call(13) != 0))
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 转码:系统转UTF-8
  106.   #--------------------------------------------------------------------------
  107.   def s2u(text)
  108.     len = MultiByteToWideChar.call(0, 0, text, -1, nil, 0);
  109.     buf = "\0" * (len*2)
  110.     MultiByteToWideChar.call(0, 0, text, -1, buf, buf.size/2);
  111.     len = WideCharToMultiByte.call(65001, 0, buf, -1, nil, 0, nil, nil);
  112.     ret = "\0" * len
  113.     WideCharToMultiByte.call(65001, 0, buf, -1, ret, ret.size, nil, nil);
  114.     return ret.delete("\000")
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 转码:UTF-8转系统
  118.   #--------------------------------------------------------------------------
  119.   def u2s(text)
  120.     len = MultiByteToWideChar.call(65001, 0, text, -1, nil, 0);
  121.     buf = "\0" * (len*2)
  122.     MultiByteToWideChar.call(65001, 0, text, -1, buf, buf.size/2);
  123.     len = WideCharToMultiByte.call(0, 0, buf, -1, nil, 0, nil, nil);
  124.     ret = "\0" * len
  125.     WideCharToMultiByte.call(0, 0, buf, -1, ret, ret.size, nil, nil);
  126.     return ret.delete("\000")
  127.   end
  128.   private :u2s ,:s2u # 定义私有功能
  129. end
复制代码
第三个:Sprite_TextBox
  1. #==============================================================================
  2. # ■ Sprite_TextBox  by EngShun
  3. #------------------------------------------------------------------------------
  4. #  显示输入框用的活动块。
  5. #==============================================================================
  6. class Sprite_TextBox < Sprite
  7.   #--------------------------------------------------------------------------
  8.   # ● 设置缓存的类
  9.   #--------------------------------------------------------------------------
  10.   Cache = Struct.new(:bc ,:fc ,:fs ,:text ,:sel_pos)
  11.   #--------------------------------------------------------------------------
  12.   # ● 定义实例变量
  13.   #--------------------------------------------------------------------------
  14.   attr_accessor :textbox
  15.   attr_accessor :back_color
  16.   #--------------------------------------------------------------------------
  17.   # ● 初始化
  18.   #--------------------------------------------------------------------------
  19.   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)
  20.     super(nil)
  21.     self.x = x
  22.     self.y = y
  23.     self.bitmap = Bitmap.new(w,h)
  24.     self.bitmap.font.color = fc
  25.     @back_color = bc
  26.     @textbox = tb
  27.     [url=home.php?mod=space&uid=341345]@Cache[/url] = Cache.new
  28.     refresh
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 刷新
  32.   #--------------------------------------------------------------------------
  33.   def update
  34.     super
  35.     return unless @textbox.focus
  36.     @textbox.update
  37.     if (self.bitmap.font.color != @cache.fc) or
  38.        (self.bitmap.font.size != @cache.fs) or
  39.        (@textbox.sel_pos != @cache.sel_pos) or
  40.        (@textbox.text != @cache.text) or
  41.        (@back_color != @cache.bc)
  42.       refresh
  43.     end
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 释放
  47.   #--------------------------------------------------------------------------
  48.   def dispose
  49.     self.bitmap.dispose
  50.     @textbox.dispose
  51.     super
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 内容刷新
  55.   #--------------------------------------------------------------------------
  56.   def refresh
  57.     @cache.fc = self.bitmap.font.color
  58.     @cache.fs = self.bitmap.font.size
  59.     @cache.sel_pos = @textbox.sel_pos
  60.     @cache.text = @textbox.text
  61.     @cache.bc = @back_color
  62.     w = self.bitmap.width
  63.     h = self.bitmap.height
  64.     self.bitmap.fill_rect(0,0,w,h,@back_color)
  65.     self.bitmap.draw_text(4,0,w-4,h,@textbox.text)
  66.     t = @textbox.text.scan(/./)[0,@textbox.sel_pos].join("")
  67.     s = self.bitmap.text_size(t).width
  68.     self.bitmap.draw_text((4 + s)-16,0,32,h,"|",1)
  69.   end
  70.   private :refresh # 设置私有功能
  71. end
复制代码
第四个:Scene_Name
  1. #==============================================================================
  2. # ■ Scene_Name
  3. #------------------------------------------------------------------------------
  4. #  处理名称输入画面的类。
  5. #==============================================================================
  6. class Scene_Name
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     @spriteset = Spriteset_Map.new
  12.     @actor = $game_actors[$game_temp.name_actor_id]
  13.     [url=home.php?mod=space&uid=37298]@Window[/url] = Window_Base.new(0,480-128,640,128)
  14.     @window.contents = Bitmap.new(576,96)
  15.     @window.draw_actor_graphic(@actor, 60, 70)
  16.     @window.contents.draw_text(128,0,480,32,$input)
  17.     @window.opacity = 180
  18.     @sprite_tb = Sprite_TextBox.new(144,410,464)
  19.     @sprite_tb.z = 500
  20.     @sprite_tb.textbox.limit = $game_temp.name_max_char
  21.     @sprite_tb.textbox.text = @actor.name
  22.     @sprite_tb.textbox.sel_pos = @actor.name.length
  23.     @sprite_tb.opacity = 180
  24.     Graphics.transition
  25.     loop do
  26.       Graphics.update
  27.       Input.update
  28.       update
  29.       break if $scene != self
  30.     end
  31.     Graphics.freeze
  32.     @sprite_tb.dispose
  33.     @window.dispose
  34.     @spriteset.dispose
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 刷新画面
  38.   #--------------------------------------------------------------------------
  39.   def update
  40.     @sprite_tb.update
  41.     if @sprite_tb.textbox.press_enter?
  42.       if @sprite_tb.textbox.text == ""
  43.         $game_system.se_play($data_system.buzzer_se)
  44.         return
  45.       end
  46.       @actor.name = @sprite_tb.textbox.text
  47.       $scene = Scene_Map.new
  48.     end
  49.   end
  50. end
复制代码
调用方法: 修改某个角色的姓名,这个角色最好不用,因为他的名字就是你要输入的东西,角色姓名的调用方法自己百度吧,是个字符串,把这个字符串代入你要的变量,一切都ok了。
偶是熬夜学编程的傻子
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
119
在线时间
65 小时
注册时间
2013-2-20
帖子
34
14
发表于 2014-7-14 17:27:20 | 只看该作者
lanyuting 发表于 2014-7-12 14:10
我不是要改名字,是要让玩家输入文本,就想文字答案那种

这其实是用更改名字的方法输入答案
[
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-13 19:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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