Project1

标题: 【xp】名称输入处理 想缩小窗口到 屏幕下半方,能做到吗? [打印本页]

作者: 惊天动地    时间: 2011-12-10 20:20
标题: 【xp】名称输入处理 想缩小窗口到 屏幕下半方,能做到吗?
各位高手:
   xp 事件里面 名称输入处理   显示的是满屏,我想缩小显示到 屏幕的下半部,大概缩小一半吧,怎么弄呢?

谢谢了
作者: iisnow    时间: 2011-12-11 01:16
这些都是简单的窗口操作:
算了,教学一下吧:
F11,打开脚本,左边找到Window_NameEdit和Window_NameInput两个代码,
写点开NameEdit,看到19行,
super(X,Y,W,H)(具体的数字我不记得了)
窗口有个原点即它的左上角:它在屏幕中的坐标即是(X,Y)(Y轴以向下为正,X以向右为正)
W,H指的是窗口的宽度与高度
把它改成
  1. super(0, 120, 640, 120)
复制代码

运行试试
再看Window_NameInput的51行,类似的改为
  1. super(0, 240, 640, 240)
复制代码
至于Window_NameInput上面的一堆假名,你也可以改为汉字~~
这时运行就看到了窗口的变化
(在没有窗口的地方显示为黑色,倘若需要以当前地图为背景(好像你就是这个意思吧),就又有点麻烦了,晚了就不想那个了)

这时发现Window_NameInput内容放不下了,于是把它们字体改小,同时注意布局的变化就够了:
(具体的过程不表述了)
最后的脚本为:(数值最后又进行了调整,最后试了试背景不变换的功能……)
  1. class Window_NameEdit
  2.   
  3.   def initialize(actor, max_char)
  4.     super(0, 165, 640, 75)
  5.     self.contents = Bitmap.new(width - 32, height - 32)
  6.     @actor = actor
  7.     @name = actor.name
  8.     @max_char = max_char
  9.     # 控制名字在最大字数以内
  10.     name_array = @name.split(//)[0...@max_char]
  11.     @name = ""
  12.     for i in 0...name_array.size
  13.       @name += name_array[i]
  14.     end
  15.     @default_name = @name
  16.     @index = name_array.size
  17.     refresh
  18.     update_cursor_rect
  19.   end
  20.   
  21.   def refresh
  22.     self.contents.clear
  23.     # 描绘名称
  24.     name_array = @name.split(//)
  25.     for i in 0...@max_char
  26.       c = name_array[i]
  27.       if c == nil
  28.         c = "_"
  29.       end
  30.       x = 320 - @max_char * 14 + i * 28
  31.       self.contents.draw_text(x, 5, 28, 32, c, 1)
  32.     end
  33.     # 描绘图形
  34.     draw_actor_graphic(@actor, 320 - @max_char * 14 - 40, 45)
  35.   end
  36.   
  37.   def update_cursor_rect
  38.     x = 320 - @max_char * 14 + @index * 28
  39.     self.cursor_rect.set(x, 5, 28, 32)
  40.   end
  41.   
  42. end

  43. class Window_NameInput
  44.   
  45.   def initialize
  46.     super(0, 240, 640, 240)
  47.     self.contents = Bitmap.new(width - 32, height - 32)
  48.     @index = 0
  49.     refresh
  50.     update_cursor_rect
  51.   end
  52.   
  53.   def refresh
  54.     self.contents.font.size = 15
  55.     self.contents.clear
  56.     for i in 0..179
  57.       x = 4 + i / 5 / 9 * 152 + i % 5 * 28
  58.       y = i / 5 % 9 * 20
  59.       self.contents.draw_text(x, y, 28, 20, CHARACTER_TABLE[i], 1)
  60.     end
  61.     self.contents.draw_text(544, 9 * 20, 64, 20, "确定", 1)
  62.   end
  63.   
  64.   def update_cursor_rect
  65.     # 光标位置在 [确定] 的情况下
  66.     if @index >= 180
  67.       self.cursor_rect.set(544, 9 * 20, 64, 20)
  68.     # 光标位置在 [确定] 以外的情况下
  69.     else
  70.       x = 4 + @index / 5 / 9 * 152 + @index % 5 * 28
  71.       y = @index / 5 % 9 * 20
  72.       self.cursor_rect.set(x, y, 28, 20)
  73.     end
  74.   end
  75.   
  76. end


  77. #RGSS没有RGSS2好的一个地方就是没有足够的常量定义,以至于经常要重写方法,烦啊
  78. #吐了个槽
复制代码

效果:

(图中以地图为背景的功能只是当时的想法,纯粹用我的脚本,上方就是黑的,至于我的地图显示的功能有一个BUG,不过现在太晚就不调试了,所以就算了吧,另外半透明效果也不在上面的脚本里)




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