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

Project1

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

文字显示类问题

 关闭 [复制链接]

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
跳转到指定楼层
1
发表于 2009-6-2 18:20:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
脚本分3个窗口(日记名/目录/日记内容)
"目录"窗口宽640
    super(0, 96, 640, 416)
    @column_max = 2  #分两排(就好像"物品"栏一样)
我改成
    super(0, 96, 320, 416)
    @column_max = 1
这样目录就只显示在左边,并且"选项"窗口只有一排
本来是:
1   2
3   4
5
现在成了:
1
3
5
右边的没有放到左边...反而消失了...是不是文字在别的地方设置?我应该怎么把文字设置过来左边...?
全段脚本:
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 96, 320, 416)
    @column_max = 1
    data_set
    @item_max = @data.size
    self.index = 0
    refresh
  end
  def data_set
    @data = []
    @diary_data = [0]
    for i in 1..QUESTDIARY_DATA_MAX
      @diary_data = Data_Questdiary.new(i)
      next if (!NO_DATA_VISIBLE and !@diary_data.title_visible?)
      @data.push(@diary_data) if @diary_data.exist
    end
  end


整体脚本:
  1. #冒険日記
  2. #
  3. #使用脚本:$scene = Scene_Questdiary.new
  4. #
  5. #ただ単に文字を描画するだけなので日記以外にも使えるかもしれません。
  6. #使える制御文字は以下の通り。
  7. #
  8. #\N[n]                         ID n番のアクターの名前を表示します。
  9. #\V[n]                         変数 n番の値を表示します。
  10. #\C[n]                         フォントカラーを変更します。
  11. #\G                            現在の所持金を表示します。
  12. #\O[n]                         不透明度を変更します。(0~255)
  13. #\H[n]                         フォントサイズを変更します。(6~32)
  14. #\R[本文,ルビ]                 ルビ付きの文字を表示します。
  15. #\Pic[x,y,ファイルネーム]      Pictures画像を表示します。
  16. #\Bat[x,y,ファイルネーム,hue]  Battlers画像を表示します。
  17. #\Cha[x,y,ファイルネーム,hue,向き,パターン]  Characters画像を表示します。
  18. #※向き テンキーの配置と同じ、下2左4右6上8
  19. #  パターン1~4
  20. #
  21. #日記内容の設定で使う時は「\\n[1]」のように
  22. #「\」を一つ余分につけてください。
  23. #
  24. #サンプルを色々いじってみれば、分かりやすいと思います。

  25. class Window_Questdiary_Select < Window_Selectable
  26.   QUESTDIARY_DATA_MAX = 10  #日記データの最大数
  27.   TITLE_TEXT_EX = true      #日記のタイトルにも制御文字を使用するか?
  28.                             #使用した場合長いタイトルを表示しきれない場合アリ
  29.                             #(draw_textを使用しないので、自動縮小機能が働かない為)
  30.   NO_DATA_VISIBLE = true    #まだ出現していない項目を表示するかどうか
  31.   DRAW_ID = true            #日記番号を表記するかどうか
  32. end
  33. class Data_Questdiary
  34.   VISIBLE_JUDGE_MODE = 1  #出現判定にスイッチを使うか変数を使うか 0:スイッチ 1:変数
  35.                           #スイッチにすると、1つの項目に複数のメッセージを
  36.                           #設定できなくなります。
  37.   attr_reader   :exist
  38.   attr_reader   :title
  39.   attr_reader   :id
  40.   #--------------------------------------------------------------------------
  41.   # ● オブジェクト初期化
  42.   #--------------------------------------------------------------------------
  43.   def initialize(id)
  44.     @id = id
  45.     @title = []
  46.     @title[0] = "タイトルなーし" # デフォルトタイトル(通常使用しない)
  47.     @variable = 0
  48.     @variable_max = 1
  49.     @comment = []
  50.     @exist = false
  51.     set_data(id)
  52.   end
  53.   # タイトル取得
  54.   def title
  55.     # 配列でなければそのまま返す
  56.     return @title unless @title.is_a?(Array)
  57.     # スイッチで判定か変数番号が0かタイトルが存在しない場合は配列の最初を返す
  58.     if VISIBLE_JUDGE_MODE == 0 or @variable == 0 or
  59.        not @title[$game_variables[@variable]].nil?
  60.       return @title[0]
  61.     end
  62.     # 変数番号によって返すタイトルを決める
  63.     return @title[$game_variables[@variable]-1]
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 日記内容の設定
  67.   #--------------------------------------------------------------------------
  68.   def set_data(id)
  69.     @id = id
  70.     case @id
  71.     when 1 # ID
  72.       @title = "\\c[1]日记!\\c[0]" # タイトル
  73.       @variable = 0 # 出現変数番号0なら常時出現
  74.       @comment[0] = <<-EOS # ここから内容を書く
  75. \\r[るびびびです,るびー]るるるるー
  76. \\h[32]でけー\\h[22]ふつー\\h[12]ちっけー\\h[22]
  77. \\c[2]色変えてすと\\c[0]\\o[128]うっすいぜ\\o[255]
  78. \\gごーるど  変数1の値=\\v[1]
  79. \\r[るび,るびーびーびーびーですよ]るるるるびー
  80. \\h[32]\\r[でっかいるび,おおきなふりがな]\\h[22]らららー

  81. \\h[12]\\r[ちっさいるび,ちいさなふりがな]\\h[22]ららりらー
  82. ↓ピクチャ表示てすと
  83. \\pic[0,288,TR2_P05·小雏的逆推]\\bat[480,160,001-Fighter01,160]\\cha[360,160,001-Fighter01,160,8,4]
  84.       EOS
  85.       # ここまで
  86.       @variable_max = @comment.size
  87.       @exist = true # 存在フラグ trueにしといてください
  88.     when 2
  89.       @title[0] = "ちょっとした説明"
  90.       @variable = 0
  91.       @comment[0] = <<-EOS
  92. variableに設定した変数番号の値で
  93. 出現する・しないを設定可能
  94. 変数の値が0の時は出現しない
  95. 1以上の時はそれぞれ対応したメッセージが表示されます

  96. このサンプルでは
  97. 変数番号10番の値で4つ目の日記が変化します
  98. 値を1か2にするとそれぞれメッセージが表示されます
  99.       EOS
  100.       @variable_max = @comment.size
  101.       @exist = true
  102.     when 3
  103.       @title[0] = "すくろーる"
  104.       @variable = 0
  105.       @comment[0] = <<-EOS
  106. 1 スクロールします
  107. 2 上下キーで1行ずつ移動
  108. 3 左右キーでページ単位で移動
  109. 4
  110. 5
  111. 6
  112. 7
  113. 8
  114. 9
  115. 10
  116. 11
  117. 12この先スクロールてすと
  118. 13↓
  119. 14↓
  120. 15↓
  121. 16↓
  122. 17↓
  123. 18↓
  124. 19↓
  125. 20↓
  126. 21↓
  127. 22↓
  128. 23↓
  129. 24こんな感じ
  130.       EOS
  131.       @variable_max = @comment.size
  132.       @exist = true
  133.     when 4
  134.       @title[0] = "\\n[1]の必殺技1"
  135.       @title[1] = "\\n[1]の必殺技2"
  136.       @variable = 1
  137.       @comment[0] = <<-EOS
  138. 内容その1
  139. \\pic[0,240,TR2_P05·小雏的逆推]
  140.       EOS
  141.       @comment[1] = <<-EOS
  142. 内容その2
  143. \\pic[0,240,TR2_P05·小雏的逆推]
  144.       EOS
  145.       @variable_max = @comment.size
  146.       @exist = true
  147.     when 5
  148.       @title[0] = "てすと"
  149.       @variable = 0
  150.       @comment[0] = <<-EOS
  151. いろいろてすとです。
  152.       EOS
  153.       @variable_max = @comment.size
  154.       @exist = true
  155.     end
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 日記内容を返す
  159.   #--------------------------------------------------------------------------
  160.   def show_comment
  161.     return @comment[0] if VISIBLE_JUDGE_MODE == 0
  162.     if @comment.size == 1
  163.       return @comment[0]
  164.     else
  165.       temp = [[$game_variables[@variable]-1, 0].max, @variable_max-1].min
  166.       return @comment[temp]
  167.     end
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ● 日記タイトル出現判定
  171.   #--------------------------------------------------------------------------
  172.   def title_visible?
  173.     return true if @variable == 0
  174.     if VISIBLE_JUDGE_MODE == 0
  175.       if $game_switches[@variable]
  176.         return true
  177.       else
  178.         return false
  179.       end
  180.     else
  181.       if $game_variables[@variable] == 0
  182.         return false
  183.       else
  184.         return true
  185.       end
  186.     end
  187.   end
  188. end

  189. class Window_Base < Window
  190.   #--------------------------------------------------------------------------
  191.   # ● 文字列変換
  192.   #--------------------------------------------------------------------------
  193.   def transfer(str)
  194.     text = str.clone
  195.     # 制御文字処理
  196.     begin
  197.     text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  198.     end
  199.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  200.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  201.     end
  202.     # 便宜上、"\\\\" を "\000" に変換
  203.     text.gsub!(/\\\\/) { "\000" }
  204.     # "\\C" を "\001" に、"\\G" を "\002" に変換
  205.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  206.     text.gsub!(/\\[Gg]/) { "\002" }
  207.     # 不透明度
  208.     text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\200[#{$1}]" }
  209.     # 文字サイズ
  210.     text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\201[#{$1}]" }
  211.     # ルビ
  212.     text.gsub!(/\\[Rr]\[(.+?),(.+?)\]/) { "\202[#{$1},#{$2}]" }
  213.     # ピクチャ表示
  214.     text.gsub!(/\\[Pp]ic\[([0-9]+),([0-9]+),([^,\]]+)\]/) { "\250[#{$1},#{$2},#{$3}]" }
  215.     # バトラー表示
  216.     text.gsub!(/\\[Bb]at\[([0-9]+),([0-9]+),([^,\]]+),([0-9]+)\]/) { "\251[#{$1},#{$2},#{$3},#{$4}]" }
  217.     # キャラグラフィック表示
  218.     text.gsub!(/\\[Cc]ha\[([0-9]+),([0-9]+),([^,\]]+),([0-9]+),([0-9]+),([0-9]+)\]/) { "\252[#{$1},#{$2},#{$3},#{$4},#{$5},#{$6}]" }
  219.    
  220.     return text
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ● 変換した文字列を描画
  224.   #--------------------------------------------------------------------------
  225.   def draw_ex_text(ox, oy, str, align=0)
  226.     text = str.clone
  227.     x = 0
  228.     y = 0
  229.     # c に 1 文字を取得 (文字が取得できなくなるまでループ)
  230.     while ((c = text.slice!(/./m)) != nil)
  231.       # \\ の場合
  232.       if c == "\000"
  233.         # 本来の文字に戻す
  234.         c = "\\"
  235.       end
  236.       # \C[n] の場合
  237.       if c == "\001"
  238.         # 文字色を変更
  239.         text.sub!(/\[([0-9]+)\]/, "")
  240.         color = $1.to_i
  241.         if color >= 0 and color <= 7
  242.           self.contents.font.color = text_color(color)
  243.         end
  244.         # 次の文字へ
  245.         next
  246.       end
  247.       # \G の場合
  248.       if c == "\002"
  249.         # 所持ゴールドに変換
  250.         c = $game_party.gold.to_s
  251.         # 文字を描画
  252.         self.contents.draw_text(ox+4+x, oy+4+ 32 * y, self.contents.text_size(c).width, 32, c)
  253.         # x に描画した文字の幅を加算
  254.         x += self.contents.text_size(c).width
  255.         # 次の文字へ
  256.         next
  257.       end
  258.       
  259.       # \O の場合
  260.       if c == "\200"
  261.         text.sub!(/\[([0-9]+)\]/, "")
  262.         opacity = $1.to_i
  263.         temp = self.contents.font.color
  264.         self.contents.font.color = Color.new(temp.red, temp.green, temp.blue, opacity)
  265.         # 次の文字へ
  266.         next
  267.       end
  268.       # \H の場合
  269.       if c == "\201"
  270.         text.sub!(/\[([0-9]+)\]/, "")
  271.         self.contents.font.size = [[$1.to_i, 6].max, 32].min
  272.         # 次の文字へ
  273.         next
  274.       end
  275.       # \R の場合
  276.       if c == "\202"
  277.         text.sub!(/\[(.+?),(.+?)\]/, "")
  278.         x += ruby_set(ox+x,oy+(y*32),$1,$2)
  279.         # 次の文字へ
  280.         next
  281.       end
  282.       # \Pic の場合
  283.       if c == "\250"
  284.         text.sub!(/\[([0-9]+),([0-9]+),([^,\]]+)\]/, "")
  285.         ope = self.contents.font.color.alpha
  286.         set_picture($1.to_i, $2.to_i, $3, ope)
  287.         # 次の文字へ
  288.         next
  289.       end
  290.       # \Bat の場合
  291.       if c == "\251"
  292.         text.sub!(/\[([0-9]+),([0-9]+),([^,\]]+),([0-9]+)\]/, "")
  293.         ope = self.contents.font.color.alpha
  294.         set_battler($1.to_i, $2.to_i, $3, $4.to_i, ope)
  295.         # 次の文字へ
  296.         next
  297.       end
  298.       # \Cha の場合
  299.       if c == "\252"
  300.         text.sub!(/\[([0-9]+),([0-9]+),([^,\]]+),([0-9]+),([0-9]+),([0-9]+)\]/, "")
  301.         ope = self.contents.font.color.alpha
  302.         set_character($1.to_i, $2.to_i, $3, $4.to_i, $5.to_i, $6.to_i, ope)
  303.         # 次の文字へ
  304.         next
  305.       end
  306.       # 改行文字の場合
  307.       if c == "\n"
  308.         # y に 1 を加算
  309.         y += 1
  310.         x = 0
  311.         # 次の文字へ
  312.         next
  313.       end
  314.       # 文字を描画
  315.       self.contents.draw_text(ox+4+x, 4+oy+ 32 * y, 40, 32, c)
  316.       # x に描画した文字の幅を加算
  317.       x += self.contents.text_size(c).width
  318.     end
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ● ルビ描画
  322.   #--------------------------------------------------------------------------
  323.   def ruby_set(x,y,str,ruby)
  324.     text_w = self.contents.text_size(str).width
  325.     text_h = self.contents.text_size(str).height
  326.     f_size_back = self.contents.font.size
  327.     ruby_size = 10
  328.     self.contents.font.size = ruby_size
  329.     ruby_w = self.contents.text_size(ruby).width
  330.     self.contents.draw_text(4+x, 4+4+y-ruby_size+1, text_w, ruby_size, ruby, 1)
  331.     self.contents.font.size = f_size_back
  332.     self.contents.draw_text(4+x, 4+4+y, text_w, text_h, str)
  333.     return text_w
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ● 图片描画
  337.   #--------------------------------------------------------------------------
  338.   def set_picture(x, y, filename, opacity=255)
  339.     bitmap = RPG::Cache.picture(filename)
  340.     self.contents.blt(x, y, bitmap, bitmap.rect, opacity)
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● バトラー描画
  344.   #--------------------------------------------------------------------------
  345.   def set_battler(x, y, filename, hue, opacity=255)
  346.     bitmap =RPG::Cache.battler(filename, hue)
  347.     self.contents.blt(x, y, bitmap, bitmap.rect, opacity)
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● 字符描画
  351.   #--------------------------------------------------------------------------
  352.   def set_character(x, y, filename, hue, dir, pat, opacity=255)
  353.     bitmap = RPG::Cache.character(filename, hue)
  354.     cw = bitmap.width / 4
  355.     ch = bitmap.height / 4
  356.     cy = ch * (dir / 2 - 1)
  357.     cx = cw * (pat - 1)
  358.     src_rect = Rect.new(cx, cy, cw, ch)
  359.     self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, opacity)
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● テキストの行数を返す
  363.   #--------------------------------------------------------------------------
  364.   def text_row(str)
  365.     text = str.clone
  366.     num = 0
  367.     # c に 1 文字を取得 (文字が取得できなくなるまでループ)
  368.     while ((c = text.slice!(/./m)) != nil)
  369.       # 改行文字の場合
  370.       if c == "\n"
  371.         # num に 1 を加算
  372.         num += 1
  373.         # 次の文字へ
  374.         next
  375.       end
  376.     end
  377.     return num
  378.   end
  379. end

  380. #==============================================================================
  381. # ■ Window_Scroll
  382. #------------------------------------------------------------------------------
  383. #  スクロールの機能を持つウィンドウクラスです。
  384. #==============================================================================
  385. class Window_Scroll < Window_Base
  386.   #--------------------------------------------------------------------------
  387.   # ● 公開インスタンス変数
  388.   #--------------------------------------------------------------------------
  389.   attr_reader   :index                    # カーソル位置
  390.   attr_reader   :help_window              # ヘルプウィンドウ
  391.   #--------------------------------------------------------------------------
  392.   # ● オブジェクト初期化
  393.   #     x      : ウィンドウの X 座標
  394.   #     y      : ウィンドウの Y 座標
  395.   #     width  : ウィンドウの幅
  396.   #     height : ウィンドウの高さ
  397.   #--------------------------------------------------------------------------
  398.   def initialize(x, y, width, height)
  399.     super(x, y, width, height)
  400.     @item_max = 1
  401.     @column_max = 1
  402.     @index = 0
  403.     self.cursor_rect.empty
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # ● カーソル位置の設定
  407.   #     index : 新しいカーソル位置
  408.   #--------------------------------------------------------------------------
  409.   def index=(index)
  410.     @index = index
  411.     # ヘルプテキストを更新 (update_help は継承先で定義される)
  412.     #if self.active and @help_window != nil
  413.     #  update_help
  414.     #end
  415.     # カーソルの矩形を更新
  416.     update_cursor_rect
  417.   end
  418.   #--------------------------------------------------------------------------
  419.   # ● 行数の取得
  420.   #--------------------------------------------------------------------------
  421.   def row_max
  422.     # 項目数と列数から行数を算出
  423.     return (@item_max + @column_max - 1) / @column_max
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 先頭の行の取得
  427.   #--------------------------------------------------------------------------
  428.   def top_row
  429.     # ウィンドウ内容の転送元 Y 座標を、1 行の高さ 32 で割る
  430.     return self.oy / 32
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ● 先頭の行の設定
  434.   #     row : 先頭に表示する行
  435.   #--------------------------------------------------------------------------
  436.   def top_row=(row)
  437.     # row が 0 未満の場合は 0 に修正
  438.     if row < 0
  439.       row = 0
  440.     end
  441.     # row が row_max - 1 超の場合は row_max - 1 に修正
  442.     if row > row_max - 1
  443.       row = row_max - 1
  444.     end
  445.     # row に 1 行の高さ 32 を掛け、ウィンドウ内容の転送元 Y 座標とする
  446.     self.oy = row * 32
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 1 ページに表示できる行数の取得
  450.   #--------------------------------------------------------------------------
  451.   def page_row_max
  452.     # ウィンドウの高さから、フレームの高さ 32 を引き、1 行の高さ 32 で割る
  453.     return 1#(self.height - 32) / 32
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● 1 ページに表示できる項目数の取得
  457.   #--------------------------------------------------------------------------
  458.   def page_item_max
  459.     # 行数 page_row_max に 列数 @column_max を掛ける
  460.     return (self.height - 32) / 32#page_row_max #* @column_max
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ● ヘルプウィンドウの設定
  464.   #     help_window : 新しいヘルプウィンドウ
  465.   #--------------------------------------------------------------------------
  466.   def help_window=(help_window)
  467.     @help_window = help_window
  468.     # ヘルプテキストを更新 (update_help は継承先で定義される)
  469.     if self.active and @help_window != nil
  470.       update_help
  471.     end
  472.   end
  473.   #--------------------------------------------------------------------------
  474.   # ● カーソルの矩形更新
  475.   #--------------------------------------------------------------------------
  476.   def update_cursor_rect
  477.     # カーソル位置が 0 未満の場合
  478.     if @index < 0
  479.       self.cursor_rect.empty
  480.       return
  481.     end
  482.     # 現在の行を取得
  483.     row = @index #/ @column_max
  484.     # 現在の行が、表示されている先頭の行より前の場合
  485.     if row < self.top_row
  486.       # 現在の行が先頭になるようにスクロール
  487.       self.top_row = row
  488.     end
  489.     # 現在の行が、表示されている最後尾の行より後ろの場合
  490.     if row > self.top_row + (self.page_row_max - 1)
  491.       # 現在の行が最後尾になるようにスクロール
  492.       self.top_row = row - (self.page_row_max - 1)
  493.     end
  494.     # カーソルの幅を計算
  495.     #cursor_width = self.width / @column_max - 32
  496.     # カーソルの座標を計算
  497.     #x = @index % @column_max * (cursor_width + 32)
  498.     #y = @index / @column_max * 32 - self.oy
  499.     # カーソルの矩形を更新
  500.     #self.cursor_rect.set(x, y, cursor_width, 32)
  501.   end
  502.   #--------------------------------------------------------------------------
  503.   # ● フレーム更新
  504.   #--------------------------------------------------------------------------
  505.   def update
  506.     super
  507.     # カーソルの移動が可能な状態の場合
  508.     if self.active and @item_max > 0 and @index >= 0 and
  509.        self.contents.height / 32 > (self.height - 32) / 32
  510.       # 方向ボタンの下が押された場合
  511.       if Input.repeat?(Input::DOWN)
  512.         # 列数が 1 かつ 方向ボタンの下の押下状態がリピートでない場合か、
  513.         # またはカーソル位置が(項目数 - 列数)より前の場合
  514.         if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
  515.            @index < @item_max - @column_max
  516.           # カーソルを下に移動
  517.           $game_system.se_play($data_system.cursor_se)
  518.           @index = (@index + @column_max) % @item_max
  519.         end
  520.       end
  521.       # 方向ボタンの上が押された場合
  522.       if Input.repeat?(Input::UP)
  523.         # 列数が 1 かつ 方向ボタンの上の押下状態がリピートでない場合か、
  524.         # またはカーソル位置が列数より後ろの場合
  525.         if (@column_max == 1 and Input.trigger?(Input::UP)) or
  526.            @index >= @column_max
  527.           # カーソルを上に移動
  528.           $game_system.se_play($data_system.cursor_se)
  529.           @index = (@index - @column_max + @item_max) % @item_max
  530.         end
  531.       end
  532.       # 方向ボタンの右が押された場合
  533.       if Input.repeat?(Input::RIGHT)
  534.         # 表示されている最後尾の行が、データ上の最後の行よりも前の場合
  535.         if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
  536.           # カーソルを 1 ページ後ろに移動
  537.           $game_system.se_play($data_system.cursor_se)
  538.           @index = [@index + self.page_item_max, @item_max - 1].min
  539.           self.top_row += self.page_row_max
  540.         end
  541.       end
  542.       # 方向ボタンの左が押された場合
  543.       if Input.repeat?(Input::LEFT)
  544.         # 表示されている先頭の行が 0 より後ろの場合
  545.         if self.top_row > 0
  546.           # カーソルを 1 ページ前に移動
  547.           $game_system.se_play($data_system.cursor_se)
  548.           @index = [@index - self.page_item_max, 0].max
  549.           self.top_row -= self.page_row_max
  550.         end
  551.       end
  552.     end
  553.     # ヘルプテキストを更新 (update_help は継承先で定義される)
  554.     if self.active and @help_window != nil
  555.       update_help
  556.     end
  557.     # カーソルの矩形を更新
  558.     update_cursor_rect
  559.   end
  560. end

  561. class Window_Questdiary_Select < Window_Selectable
  562.   attr_reader   :data
  563.   #--------------------------------------------------------------------------
  564.   # ● オブジェクト初期化
  565.   #--------------------------------------------------------------------------
  566.   def initialize
  567.     super(0, 96, 320, 416)
  568.     @column_max = 1
  569.     data_set
  570.     @item_max = @data.size
  571.     self.index = 0
  572.     refresh
  573.   end
  574.   def data_set
  575.     @data = []
  576.     @diary_data = [0]
  577.     for i in 1..QUESTDIARY_DATA_MAX
  578.       @diary_data[i] = Data_Questdiary.new(i)
  579.       next if (!NO_DATA_VISIBLE and !@diary_data[i].title_visible?)
  580.       @data.push(@diary_data[i]) if @diary_data[i].exist
  581.     end
  582.   end
  583.   #--------------------------------------------------------------------------
  584.   # ● 日記データ取得
  585.   #--------------------------------------------------------------------------
  586.   def diary
  587.     return @data[self.index]
  588.   end
  589.   #--------------------------------------------------------------------------
  590.   # ● リフレッシュ
  591.   #--------------------------------------------------------------------------
  592.   def refresh
  593.     if self.contents != nil
  594.       self.contents.dispose
  595.       self.contents = nil
  596.     end
  597.     #項目数が 0 でなければビットマップを作成し、全項目を描画
  598.     return if @item_max == 0
  599.     self.contents = Bitmap.new(width - 32, row_max * 32)
  600.     for i in 0...@item_max
  601.       draw_item(i)
  602.     end
  603.   end
  604.   def draw_item(index)
  605.     item = @data[index]
  606.     x = 4 + index % 2 * (288 + 32)
  607.     y = index / 2 * 32
  608.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  609.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  610.     self.contents.font.color = normal_color
  611.     self.contents.draw_text(x, y, 32, 32, item.id.to_s) if DRAW_ID
  612.     if item.title_visible?
  613.       diary_title = transfer(item.title)
  614.       if TITLE_TEXT_EX
  615.         draw_ex_text(x+48, y - 4, diary_title, 0)
  616.       else
  617.         self.contents.draw_text(x+48, y, 212, 32, diary_title, 0)
  618.       end
  619.     else
  620.       self.contents.draw_text(x+48, y, 212, 32, " -----", 0)
  621.     end
  622.   end
  623. end

  624. class Window_Questdiary_Info < Window_Scroll
  625.   #--------------------------------------------------------------------------
  626.   # ● 初始化对像
  627.   #--------------------------------------------------------------------------
  628.   def initialize
  629.     super(320, 94, 320, 416)
  630.     self.contents = Bitmap.new(width - 32, height - 32)
  631.     @menu_com = Sprite.new
  632.     @menu_com.bitmap = RPG::Cache.picture("index_top")
  633.   end
  634.   #--------------------------------------------------------------------------
  635.   # ● 刷新
  636.   #--------------------------------------------------------------------------
  637.   def refresh(comment)
  638.     self.index = 0
  639.     self.contents.dispose
  640.     contents_row = text_row(comment)
  641.     self.contents = Bitmap.new(width - 32, [contents_row * 32, self.height - 32].max)
  642.     @item_max = [(contents_row + 1 - (self.height - 32) / 32), 0].max
  643.     self.contents.font.color = normal_color
  644.     self.contents.font.size = 22
  645.     new_text = transfer(comment)
  646.     draw_ex_text(0, 0, new_text)
  647.   end
  648. end

  649. class Scene_Questdiary
  650.   #--------------------------------------------------------------------------
  651.   # ● メイン処理
  652.   #--------------------------------------------------------------------------
  653.   def main
  654.     # ウィンドウを作成
  655.     @title_window = Window_Base.new(0, 0, 640, 96)
  656.     @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
  657.     @title_window.contents.draw_text(0, 0, 320, 32, "~幻想鄉〆记事~", 0)
  658.     @main_window = Window_Questdiary_Select.new
  659.     @main_window.active = true
  660.     # インフォウィンドウを作成 (不可視・非アクティブに設定)
  661.     @info_window = Window_Questdiary_Info.new
  662.     @info_window.z = 110
  663.     @info_window.visible = false
  664.     @info_window.active = false
  665.     @title_window.opacity = 150   #日记名窗口透明度
  666.     @main_window.opacity = 150    #目录窗口透明度
  667.     @info_window.opacity = 150    #日记内容窗口透明度
  668.     @visible_index = 0
  669.     # トランジション実行
  670.     Graphics.transition
  671.     # メインループ
  672.     loop do
  673.       # ゲーム画面を更新
  674.       Graphics.update
  675.       # 入力情報を更新
  676.       Input.update
  677.       # フレーム更新
  678.       update
  679.       # 画面が切り替わったらループを中断
  680.       if $scene != self
  681.         break
  682.       end
  683.     end
  684.     # トランジション準備
  685.     Graphics.freeze
  686.     # ウィンドウを解放
  687.     @title_window.dispose
  688.     @main_window.dispose
  689.     @info_window.dispose
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # ● フレーム更新
  693.   #--------------------------------------------------------------------------
  694.   def update
  695.     # ウィンドウを更新
  696.     @main_window.update
  697.     @info_window.update
  698.     if @info_window.active
  699.       update_info
  700.       return
  701.     end
  702.     # メインウィンドウがアクティブの場合: update_target を呼ぶ
  703.     if @main_window.active
  704.       update_main
  705.       return
  706.     end
  707.   end
  708.   #--------------------------------------------------------------------------
  709.   # ● フレーム更新 (メインウィンドウがアクティブの場合)
  710.   #--------------------------------------------------------------------------
  711.   def update_main
  712.     # B ボタンが押された場合
  713.     if Input.trigger?(Input::B)
  714.       # キャンセル SE を演奏
  715.       $game_system.se_play($data_system.cancel_se)
  716.       $scene = Scene_Map.new
  717.       return
  718.     end
  719.     # C ボタンが押された場合
  720.     if Input.trigger?(Input::C)
  721.       if @main_window.diary.title_visible? == false
  722.         # ブザー SE を演奏
  723.         $game_system.se_play($data_system.buzzer_se)
  724.         return
  725.       end
  726.       # 決定 SE を演奏
  727.       $game_system.se_play($data_system.decision_se)
  728.       @main_window.active = false
  729.       @info_window.active = true
  730.       @info_window.visible = true
  731.       @visible_index = @main_window.index
  732.       @info_window.refresh(@main_window.diary.show_comment)
  733.       return
  734.     end
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # ● フレーム更新 (インフォウィンドウがアクティブの場合)
  738.   #--------------------------------------------------------------------------
  739.   def update_info
  740.     # B ボタンが押された場合
  741.     if Input.trigger?(Input::B)
  742.       # キャンセル SE を演奏
  743.       $game_system.se_play($data_system.cancel_se)
  744.       @main_window.active = true
  745.       @info_window.active = false
  746.       @info_window.visible = false
  747.       return
  748.     end
  749.     # C ボタンが押された場合
  750.     if Input.trigger?(Input::C)
  751.       return
  752.       # 決定 SE を演奏
  753.       $game_system.se_play($data_system.decision_se)
  754.       if @comment_on
  755.         @comment_on = false
  756.         @comment_window.visible = false
  757.       else
  758.         @comment_on = true
  759.         @comment_window.visible = true
  760.       end
  761.       return
  762.     end
  763.     if Input.trigger?(Input::L)
  764.       # 決定 SE を演奏
  765.       $game_system.se_play($data_system.decision_se)
  766.       loop_end = false
  767.       while loop_end == false
  768.         if @visible_index != 0
  769.           @visible_index -= 1
  770.         else
  771.           @visible_index = @main_window.data.size - 1
  772.         end
  773.         loop_end = true if @main_window.data[@visible_index].title_visible?
  774.       end
  775.       diary = @main_window.data[@visible_index]
  776.       @info_window.refresh(diary.show_comment)
  777.       return
  778.     end
  779.     if Input.trigger?(Input::R)
  780.       # 決定 SE を演奏
  781.       $game_system.se_play($data_system.decision_se)
  782.       loop_end = false
  783.       while loop_end == false
  784.         if @visible_index != @main_window.data.size - 1
  785.           @visible_index += 1
  786.         else
  787.           @visible_index = 0
  788.         end
  789.         loop_end = true if @main_window.data[@visible_index].title_visible?
  790.       end
  791.       diary = @main_window.data[@visible_index]
  792.       @info_window.refresh(diary.show_comment)
  793.       return
  794.     end
  795.   end
  796. end
复制代码

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
2
 楼主| 发表于 2009-6-3 16:13:27 | 只看该作者
急需这个修改方法.....有大大能帮忙的就帮忙看看吧...谢谢了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-13 15:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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