Project1

标题: 请教一个Window_Base窗口内容翻页的问题。 [打印本页]

作者: Benavii    时间: 2013-1-31 02:21
标题: 请教一个Window_Base窗口内容翻页的问题。
咳咳……总之,这个,那个,各位好久不见{:2_258:}

现在出于某种原因,想制作一个内容超过一屏的文字可以自由上下卷动的Window_Base类窗口(不想要Window_Selectable的光标),但是没什么思路,特来求助。谢过各位
作者: 芯☆淡茹水    时间: 2013-1-31 14:38
本帖最后由 芯☆淡茹水 于 2013-1-31 14:46 编辑

本人愚见:
   首先要看LZ所做的窗口有多大,能显示多少个字。
   窗口显示文字“draw_txt”,如果显示不完,再新建个窗口继续显示。

   最后建立场景,加入新建的所有显示文字窗口。
   在“update”里面条件分歧:if Input.trigger?(Input::DOWN)
                                 或者:if Input.trigger?(Input::UP)
    也就是上下键翻页,来显示窗口内容。

  当然这只是大概思路,如果做起来还有很多需要注意的地方,
  比如直接draw_txt 不会自动换行,需要计算好字体大小和显示
  的坐标,多draw几次。还有场景里面上下键翻页和窗口切换
  问题。
  如果LZ有需要,本人可做个范例。
作者: Benavii    时间: 2013-2-1 17:10
芯☆淡茹水 发表于 2013-1-31 14:38
本人愚见:
   首先要看LZ所做的窗口有多大,能显示多少个字。
   窗口显示文字“draw_txt”,如果显示不完 ...

嗯,我也觉得差不多是这个思路,不过问题就在文字超过一页的情况下按down方向键时对窗口内容的重新描绘上。主楼我的描述并不准确,我应该是希望窗口内容能像Selectable类型一样“随按键的方向滚动”,而“翻页”只是按pagedown等键时“一次滚动过一屏内容,看起来像是翻了页”

Window_Base是一个很愚蠢的玩意,不知道自动换行,只能用些笨办法,比如
   for c in text.scan(/./)
     if x + self.contents.text_size(c).width >= self.width - 40
      x = 4; y += 28
     end
     self.contents.draw_text(x, y, 40, 32, c, align, 3, color)
     x += self.contents.text_size(c).width
    end
这样来换行,也就是说它是写一个字累积一次宽度,超过窗框就换行的,不像Selectable每行有个index。
但是如果人为地手动把32个字分成某个数组的一个单元,判定起来是容易了,但是如果录入长篇日志之类几百几千字的东西,大概负责录入的人就会很想死{:2_254:}
设想中的这种窗口最好还能跟对话加强脚本一样,可以自动换行,用特定命令给文字上色,手动换行,然后还要能翻页。蛋疼{:2_253:}
作者: 芯☆淡茹水    时间: 2013-2-2 13:54
Benavii 发表于 2013-2-1 17:10
嗯,我也觉得差不多是这个思路,不过问题就在文字超过一页的情况下按down方向键时对窗口内容的重新描绘上 ...

  其实输入TEXT的话,LZ可参照Window_NameInput。

文字颜色的话,可在描绘文字前定义:self.contents.font.color = text_color(n) 【文本文字色,n为编号0~8】




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