Project1

标题: 关于帮助窗口内的文字 [打印本页]

作者: 赛露休斯    时间: 2009-4-5 09:26
标题: 关于帮助窗口内的文字
怎么样让帮助窗口内的文字分两行显示?
默认只有一行。。。。。 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 亿万星辰    时间: 2009-4-5 16:42
draw_text两次
第一次从开头开始描绘600像素,第二次从600开始再描绘600像素

作者: 赛露休斯    时间: 2009-4-6 00:34
draw_text两次后文章仍旧不换行,即使调整坐标也是显示重复内容。。。
作者: tommay    时间: 2009-4-6 00:44
以下引用赛露休斯于2009-4-5 16:34:27的发言:

draw_text两次后文章仍旧不换行,即使调整坐标也是显示重复内容。。。

默认的Window_Help只有640*64,除去窗口皮肤占去的空间,实际上只在高度为32像素的空间内描绘文字,默认只能有一行。如果你想显示两行,可以重写Window_Help使高度增加,但是至少有如两个问题:
1.和其他窗口会冲突,会有重叠的地方
2.除了在菜单中显示帮助窗口,其他地方(如战斗中)如果帮助窗口变高的话,可能会有影响

最好地话,还是不要改默认的高度了,如果你非要达到你要的效果,用图片菜单吧- -
作者: 赛露休斯    时间: 2009-4-6 00:55
图片菜单也要改脚本啊。。。。。
反正窗口可以调整的嘛。。。。。
目前的想法是不使用数据库里的说明,直接在脚本里写说明文章。。。
作者: tommay    时间: 2009-4-6 01:06
以下引用赛露休斯于2009-4-5 16:55:47的发言:

图片菜单也要改脚本啊。。。。。
反正窗口可以调整的嘛。。。。。
目前的想法是不使用数据库里的说明,直接在脚本里写说明文章。。。

窗口的调整,比较个性化,改起来比较麻烦,不像图片菜单,有直接可以拿来用的脚本。
如果LZ肯悬赏,或许有人会帮你做,或许LZ自己会改脚本,那就自己动手吧。Window_XXX不是很困难的说……
作者: 赛露休斯    时间: 2009-4-6 08:51
LS,不是偶不肯悬赏而是没分悬赏
想直接在脚本里写说明文章,尝试着用字符串的那个<<-STR 和 STR ,能是能显示了,但不支持换行,把Window_Message的那段般进去就脚本冲突,还是得等高手啊。。。。。。
作者: 紫苏    时间: 2009-4-6 09:00
亿万说的 draw_text 两次是指第一次描绘第一行内容,第二次描绘第二行内容~
作者: 赛露休斯    时间: 2009-4-6 09:14
这个具体怎么干?如果使用数据库里的说明好像无法用draw_text换行
如果直接用脚本指定,内容分多个draw_text,说明物质的设定起来好像也挺麻烦
作者: 八云紫    时间: 2009-4-6 09:58
  1. #==============================================================================
  2. # ■ Window_Help
  3. #------------------------------------------------------------------------------
  4. #  特技及物品的说明、角色的状态显示的窗口。
  5. #==============================================================================

  6. class Window_Help < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(0, 0, 640, 128)
  12.     self.contents = Bitmap.new(width - 32, height - 32)
  13.     @contents_x = 0
  14.     @contents_y = 0
  15.     @text = nil
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 设置文本
  19.   #     text  : 窗口显示的字符串
  20.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  21.   #--------------------------------------------------------------------------
  22.   def set_text(text, align = 0)
  23.     # 如果文本和对齐方式的至少一方与上次的不同
  24.     if text != @text or align != @align
  25.       # 再描绘文本
  26.       show(text, align)
  27.       #@text = text
  28.       @align = align
  29.       @actor = nil      
  30.     end
  31.     self.visible = true
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 设置角色
  35.   #     actor : 要显示状态的角色
  36.   #--------------------------------------------------------------------------
  37.   def set_actor(actor)
  38.     if actor != @actor
  39.       self.contents.clear
  40.       draw_actor_name(actor, 4, 0)
  41.       draw_actor_state(actor, 140, 0)
  42.       draw_actor_hp(actor, 284, 0)
  43.       draw_actor_sp(actor, 460, 0)
  44.       @actor = actor
  45.       @text = nil
  46.       self.visible = true
  47.     end
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 设置敌人
  51.   #     enemy : 要显示名字和状态的敌人
  52.   #--------------------------------------------------------------------------
  53.   def set_enemy(enemy)
  54.     text = enemy.name
  55.     state_text = make_battler_state_text(enemy, 112, false)
  56.     if state_text != ""
  57.       text += "  " + state_text
  58.     end
  59.     set_text(text, 1)
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● 刷新
  63.   #--------------------------------------------------------------------------
  64.   def show(text, align)
  65.     self.contents.clear
  66.     texts = text.dup
  67.     texts.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
  68.     texts.gsub!(/\\N/i)             { "\x00" }
  69.     texts.gsub!(/\\\\/)             { "\\" }
  70.     contents_x = 0
  71.     contents_y = 0
  72.     loop do
  73.       c = texts.slice!(/./m)            # 获取一个文字
  74.       case c
  75.       when nil                          # 无法获取文字时
  76.         break
  77.       when "\x00"                       # 新行
  78.         contents_x = 0
  79.         contents_y += 32
  80.       when "\x01"                       # \C[n](文字变色)
  81.         @text.sub!(/\[([0-9]+)\]/, "")
  82.         contents.font.color = text_color($1.to_i)
  83.         next
  84.       else                              # 一般文字
  85.         contents.draw_text(contents_x, contents_y, 40, 24, c, align)
  86.         c_width = contents.text_size(c).width
  87.         contents_x += c_width
  88.       end
  89.     end   
  90.   end
  91. end
复制代码


用法和对话差不多。不过只支持 \c[x] 和 \n [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~




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