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

Project1

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

如何增加脚本功能?

 关闭 [复制链接]

Lv2.观梦者

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

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

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

x
  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.       \V[n]
  76. \\r[るびびびです,るびー]るるるるー
  77. \\h[32]でけー\\h[22]ふつー\\h[12]ちっけー\\h[22]
  78. \\c[2]色変えてすと\\c[0]\\o[128]うっすいぜ\\o[255]
  79. \\gごーるど  変数1の値=\\v[1]
  80. \\r[るび,るびーびーびーびーですよ]るるるるびー
  81. \\h[32]\\r[でっかいるび,おおきなふりがな]\\h[22]らららー

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

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

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

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

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

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

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


有没有这个功能?如果没有,有没有办法增加?谁会加?
(就是设置一些隐藏内容,利用变量来开放.PS:隐藏的最好不只文章,显示图片/更改透明度之类的其他原本带有的功能也可以放进去.)
文章如下:
例:
一天
我去玩.
(当变量***号>=1时显示的内容:我抓到一只恐龙."图片")
8点回家"图片"
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2025-1-14 01:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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