OX論壇
Would you like to react to this message? Create an account in a few clicks or log in to continue.

對話框腳本相關

2 posters

向下

對話框腳本相關 Empty 對話框腳本相關

發表  Q—S.T. 周六 五月 17, 2008 2:57 pm

這應該不算問題, 就類別上應該屬於求腳本(倒
但是不知道這種東西要怎麼問
我現在只會調整視窗大小、增加選單選項、還有透明度處理而已Orz


嗯...我想做一個對話腳本, 內容如下 :


1.生成一個新的訊息欄, 該欄位為顯示角色名字用
2.對話框內生成臉圖, 對話框後顯示半身圖
3.訊息顯示的方式同2k3
4.訊息顯示途中可變換臉圖&半身圖
5.文字可中途放大或縮小
6.對話skip的功能
7.一行內能容納的字數擴張到整個畫面的橫幅, 如配合臉圖顯示即自動換行
8.對話途中按下Esc可開啟存檔選單(可無視)



如果太過強人所難的話, 請問能否告訴我這些相關是在哪設定或新增@@...


另外...可以請教圖片生成的原理嗎?
總覺得這部分比重佔很大

還有就是一行裡的字數限制是在哪裡做調整?



以上, 麻煩您了, 愚零先生(跪
Q—S.T.
Q—S.T.
精通豆漿拳的正義漢
精通豆漿拳的正義漢

文章數 : 326
注冊日期 : 2008-04-21

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  愚零鬥武多 周六 五月 17, 2008 4:25 pm

TO Q—S.T.
噢....不需要這樣,你去R界向所謂的眾神人跪吧XD,OOXX不搞這套的@@

第一個問題就是求腳本了,不過因為對話框的東西很難搞而且幾乎不研究(啥?
因為在下認為對話控制並不是遊戲的重點(其實是弱項Orz....
所以你叫我完全幫您寫是不大可能
不過您可以找一個功能差不多的現成腳本依照您需要追加的功能在下幫忙修改(給個菜市場連結和註明要求就行了)

圖片生成
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.picture(圖檔名)
你可以設定@sprite的x.y.z透明度,旋轉角度等等參數
圖片釋放
@sprite.bitmap.dispose
@sprite.dispose
上面是直接生成的例子

如果要在視窗裡生成用
w1 = RPG::Cache.picture(圖檔名)
self.contents.blt(x, y, w1, Rect.new(0, 0, 圖寬, 圖高))
其實都是一些死背的東西毫無難度可言@@

一行裡的字數在Window_Message裡本來就沒限制
假設視窗寬480,那他能顯示的最大寬範圍就是480-32=448
一行文字累積的數量超過448就顯示不出來了
如果你用self.contents.font.size = n的方式將字調小就能全部顯示
但是你要求的效果是會做文字縮放,所以基本上滿複雜的
愚零鬥武多
愚零鬥武多
不正常人類研究中心自慰隊員
不正常人類研究中心自慰隊員

文章數 : 421
注冊日期 : 2008-04-06

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  Q—S.T. 周日 五月 18, 2008 2:11 am

腳本連結 http://members.jcom.home.ne.jp/cogwheel/script/face_message.html

這是欲使用的腳本內容http://members.jcom.home.ne.jp/cogwheel/script/face_message.txt
要和這個http://members.jcom.home.ne.jp/cogwheel/script/face_base.txt並用

並以此追加生成姓名框&顯示半身圖



然後這是有生成姓名框的對話腳本..., 用這腳本的半身圖似乎會和上面起衝突...
http://www.66rpg.com/htm/news29.htm

生成姓名框的部分 :

# 开放姓名窗口
if @name_window != nil
@name_window.dispose
@name_window = nil
end

# 显示人物姓名
name_window_set = false
if (/\\[Mm]([0-9]*?)\[(.+?)\]/.match(text)) != nil
name_window_set = true
if $1 == ""
color = 0
else
color = $1.to_i
end
if color >= 0 and color <= 7
name_color = color
end
name_text = $2
text.sub!(/\\[Mm]([0-9]*?)\[(.*?)\]/) { "" }
end




愚零鬥武多 寫到:
一行裡的字數在Window_Message裡本來就沒限制
假設視窗寬480,那他能顯示的最大寬範圍就是480-32=448
一行文字累積的數量超過448就顯示不出來了
如果你用self.contents.font.size = n的方式將字調小就能全部顯示
但是你要求的效果是會做文字縮放,所以基本上滿複雜的


我將對話框的橫幅擴張到最大的結果會變成這樣Orz↓
對話框腳本相關 Test


以上, 不好意思麻煩了@@



愚零鬥武多 寫到:嗯,收到
因為最近比較忙,會找時間幫您設置修改的
先謝過了@@


Q—S.T. 在 周日 五月 18, 2008 9:46 pm 作了第 1 次修改
Q—S.T.
Q—S.T.
精通豆漿拳的正義漢
精通豆漿拳的正義漢

文章數 : 326
注冊日期 : 2008-04-21

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  愚零鬥武多 周日 五月 18, 2008 2:09 pm

嗯,收到
因為最近比較忙,會找時間幫您設置修改的
愚零鬥武多
愚零鬥武多
不正常人類研究中心自慰隊員
不正常人類研究中心自慰隊員

文章數 : 421
注冊日期 : 2008-04-06

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  愚零鬥武多 周四 五月 22, 2008 10:26 pm

1.改版後追加代碼說明
對話顯示半身圖(讀取Graphics\Battlers裡的圖檔)
\x[戰鬥圖像名,圖像X座標,圖像Y座標]
例:
◆文字:\X[薇薇安,120,80]
顯示文字時圖像會顯示在畫面座標(120,80)的位置
◆文字:\D
消去圖像

顯示姓名窗口
\M[顏色代碼0~9,要顯示的名字]
例:
◆文字:\M[2,薇薇安]
顯示文字時會顯示姓名窗口,姓名為紅字(薇薇安)

2.其他追加功能
加大對話框可以顯示編輯一整行的所有文字功能
基本功能都維持不變
但66版的衝突超級大因此不做整合

3.腳本設置方法
在Main上方插入以下兩個腳本
http://members.jcom.home.ne.jp/cogwheel/script/face_message.txt
http://members.jcom.home.ne.jp/cogwheel/script/face_base.txt
最後在Main上方再插入以下所有內容(也就是說此段腳本務必插在在上面兩個腳本下方才會有效果)
腳本長度超過論壇限制所以分成兩段

代碼:

#==============================================================================
# ■ Window_Message
#------------------------------------------------------------------------------
#  文章表示に使うメッセージウィンドウです。
#==============================================================================
class Window_Message < Window_Selectable
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(64, 304, 512, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.z = 9998
    # 顔グラフィックの作成
    @face = Sprite.new(self.viewport)
    @face.bitmap = Bitmap.new(10, 10)
    @face.visible = false
    # 身體圖像做成
    @body = Sprite.new
    @body.bitmap = Bitmap.new(10, 10)
    @body.visible = false
    @text = ""
    @fade_in = false
    @fade_out = false
    @contents_showing = false
    @contents_showed = false
    @cursor_width = 0
    self.active = false
    self.index = -1
    # 履歴ウィンドウの作成
    @h_window = Window.new(self.viewport)
    @h_window.x = 77
    @h_window.y = 64
    @h_window.z = 10001
    @h_window.width = 486
    @h_window.height = 352
    @h_window.opacity = 0
    @h_window.back_opacity = 160
    @h_window.windowskin = RPG::Cache.windowskin($game_system.windowskin_name)
    @h_window.active = false
    @h_window.visible = false
    @c_h = 0
    # メッセージスピードの初期化
    unless $game_player.message_speed.is_a?(Numeric)
      $game_player.message_speed = 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    terminate_message
    $game_temp.message_window_showing = false
    @face.dispose
    @body.bitmap.dispose
    @body.dispose
    if @input_number_window != nil
      @input_number_window.dispose
    end
    @h_window.dispose
    super
  end
  #--------------------------------------------------------------------------
  # ● メッセージ終了処理
  #--------------------------------------------------------------------------
  def terminate_message
    self.active = false
    self.pause = false
    self.index = -1
    self.contents.clear
    # 表示中フラグをクリア
    @contents_showing = false
    @contents_showed = false
    # メッセージ コールバックを呼ぶ
    if $game_temp.message_proc != nil
      $game_temp.message_proc.call
    end
    # 文章、選択肢、数値入力に関する変数をクリア
    $game_temp.message_text = nil
    $game_temp.message_proc = nil
    $game_temp.choice_start = 99
    $game_temp.choice_max = 0
    $game_temp.choice_cancel_type = 0
    $game_temp.choice_proc = nil
    $game_temp.num_input_start = 99
    $game_temp.num_input_variable_id = 0
    $game_temp.num_input_digits_max = 0
    # ゴールドウィンドウを開放
    if @gold_window != nil
      @gold_window.dispose
      @gold_window = nil
    end
    if @name_window != nil
      @name_window.dispose
      @name_window = nil
    end
    if @name_airtext != nil
      @name_airtext.dispose
      @name_airtext = nil
    end   
  end
  #--------------------------------------------------------------------------
  # ● テキスト初期化設定
  #--------------------------------------------------------------------------
  def text_initialize
    # メッセージウィンドウ初期化設定
    @text = $game_temp.message_text
    @back_up = @text.clone
    @rubi = ""
    @speed = $game_player.message_speed
    font_size = 22
    @wait = 0
    @push_enter = false
    @contents_close = false
    @cursor_width = 0
    # 制御文字処理
    begin
      last_text = @text.clone
      @text.gsub!(/\\[Vv]\[(\d+)\]/) { $game_variables[$1.to_i] }
    end until @text == last_text
    @text.gsub!(/\\[Nn]\[(\d+)\]/) do
      $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
    end
    # 便宜上、"\\\\" を "\000" に変換
    @text.gsub!(/\\\\/) { "\000" }
    # "\\C" を "\001" に、"\\G" を "\002" に変換
    @text.gsub!(/\\[Cc]\[(\d+)\]/) { "\001[#{$1}]" }
    @text.gsub!(/\\[Gg]/) { "\002" }
    # 制御文字をそれぞれバックスラッシュ記法に変換
    @text.gsub!(/\\[Ss]\[(\d+)\]/) { "\003[#{$1}]" }
    @text.gsub!(/\\\./) { "\004" }
    @text.gsub!(/\\\;/) { "\005" }
    @text.gsub!(/\\\|/) { "\006" }
    @text.gsub!(/\\\!/) { "\010" }
    @text.gsub!(/\\\>/) { "\016" }
    @text.gsub!(/\\\</) { "\017" }
    @text.gsub!(/\\\^/) { "\020" }
    @text.gsub!(/\\[Ii]/) { "\021" }
    @text.gsub!(/\\[Ll][Tt]/) { "\022" }
    @text.gsub!(/\\[Cc][Tt]/) { "\023" }
    @text.gsub!(/\\[Rr][Tt]/) { "\024" }
    @text.gsub!(/\\[Ff]\[(\d+)\]/) { "\025[#{$1}]" }
    @text.gsub!(/\\[Aa]\[(\-*\d+),?(\d*?)\]/) { "\026[#{$1},0#{$2}]" }
    @text.gsub!(/\\[Rr]\[(.+?),(.+?)\]/) { "\027[#{$1},#{$2}]" }
    @text.gsub!(/\\[Oo]\[(.+?)\]/) { "\030[#{$1}]" }
    @text.gsub!(/\<[Bb]\>/) { "\031" }
    @text.gsub!(/\<\/[Bb]\>/) { "\033" }
    @text.gsub!(/\<[Ii]\>/) { "\034" }
    @text.gsub!(/\<\/[Ii]\>/) { "\035" }
    @text.gsub!(/\\[Ss][Tt]/) { "" }
    @text.gsub!(/\\[Nn]/) { "\n" }
    @text.gsub!(/\\[Pp](.*?)\n/) { $1 }
    # 追加半身圖
    @text.gsub!(/\\[Xx]\[(.+?),(.+?),(.+?)\]/) { "\036[#{$1},#{$2},#{$3}]" }
    # 追加名字窗口
    @text.gsub!(/\\[Mm]\[(\-*\d+),(.+?)\]/) { "\037[#{$1},#{$2}]" }
    # 清除圖像
    @text.gsub!(/\\[Dd]/) { "\d" }
    @x = @i = 4
    @fi = @y = @py = 0
    # 最初の行がルビ付きの場合、字下げを行う
    @text = "\n" if @text == ""
    text = @text[/^.*?\n/]
    r_height = 0
    while ((c = text.slice!(/./m)) != nil)
      # \F[n] の場合、フォントサイズの変更
      if c == "\025"
        text.sub!(/\[([0-9]+)\]/, "")
        font_size = $1.to_i
        next
      end
      # ルビが存在した場合
      if c == "\027"
        text.sub!(/\[(.+?),(.+?)\]/, "")
        # ルビのテキストサイズを格納
        r_height = [r_height, font_size].max
        next
      end
    end
    # 字下げの設定
    @py = [(r_height + [(r_height + 66) / 8, r_height * 2 / 3].min - 5) -
      max_height(@text), 0].max
    # 選択肢なら字下げを行う
    if $game_temp.choice_start == 0
      @x = 4
    end
    # "\\E[n]" がある場合、イベントnに吹き出し表示
    unless self.contents.disposed?
      self.contents.dispose
    end
    # 吹き出し表示の場合
    if @text.gsub!(/\\[Ee]\[(\-*?\d+),?(\d*?)\]/) { "" }
      # メッセージの幅、高さの読み込み
      @event = $game_system.map_interpreter.get_character($1.to_i)
      self.contents = Bitmap.new(10, 10)
      self.contents.font.size = font_size
      self.width = text_width(@text) + 32
      self.height = [text_height(@text) + 32 + @py, 32].max
      # 数値入力の場合、高さと幅の調整
      if $game_temp.num_input_variable_id > 0
        dummy_bitmap = Bitmap.new(32, 32)
        i_width = dummy_bitmap.text_size("0").width + 8
        dummy_bitmap.dispose
        self.width=[self.width,i_width*$game_temp.num_input_digits_max+48].max
        self.height += 32
        # 高さが数値分しかない場合、数値入力を繰り上げる
        $game_temp.num_input_start -= 1 if self.height == 64
      end
      @w_pos = $2.to_i
      window_position
      self.contents.dispose
    else
      @event = nil
      self.x = 64
      if $game_temp.in_battle
        self.y = 16
      else
        case $game_system.message_position
        when 0  # 上
          self.y = 16
        when 1  # 中
          self.y = 160
        when 2  # 下
          self.y = 304
        end
      end
      self.width = 512
      self.height = 160
    end
    # ウィンドウ内容の初期化
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.size = font_size
    self.contents.font.color = normal_color
    self.contents.font.bold = false
    self.contents.font.italic = false
    # メッセージ履歴に文章を挿入
    history_write(@text.clone)
    # 第一行目のフォントサイズが基準フォントサイズと異なる場合の体裁を整える
    @h = @c_h = max_height(@text) - self.contents.font.size
    @c_w = 0
  end
end


愚零鬥武多 在 周一 9月 15, 2008 4:36 pm 作了第 7 次修改
愚零鬥武多
愚零鬥武多
不正常人類研究中心自慰隊員
不正常人類研究中心自慰隊員

文章數 : 421
注冊日期 : 2008-04-06

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  愚零鬥武多 周四 五月 22, 2008 10:27 pm

代碼:

class Window_Message < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 改行
  #--------------------------------------------------------------------------
  def new_line
    # 選択肢ならカーソルの幅を更新
    if @h_window.active == false and @y >= $game_temp.choice_start
      @cursor_width = [@cursor_width, @x].max
    end
    # y に 1 を加算
    @y += 1
    # 次の行の最大テキスト高さ + ルビ分の字下げ
    height = max_height(@text)
    @h += height + [(height + 66) / 8, height * 2 / 3].min - 1
    @x = @fi + @i
    # 選択肢なら字下げを行う
    if @h_window.active == false and @y >= $game_temp.choice_start
      @x = @fi + @i
      # ルビ付きの場合、字下げを行う
      text = @text[/^.*?\n/]
      font_size = self.contents.font.size
      r_height = 0
      while text != "" and text != nil
        c = text.slice!(/./m)
        # \F[n] の場合、フォントサイズの変更
        if c == "\025"
          text.sub!(/\[([0-9]+)\]/, "")
          font_size = $1.to_i
          next
        end
        # ルビが存在した場合
        if c == "\027"
          text.sub!(/\[(.+?),(.+?)\]/, "")
          # ルビのテキストサイズを格納
          r_height = [r_height, font_size].max
          next
        end
      end
      # 字下げの設定
      @py = [(r_height + [(r_height + 66) / 8, r_height * 2 / 3].min - 5) -
        max_height(@text), 0].max
    end
    # 次の文字へ
  end 
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    if @body_visible
      @body.opacity += 24 if @body.opacity < 254
    else
      @body.opacity -= 48 if @body.opacity > 0
    end
    # メッセージ履歴の呼び出し
    if @h_window.active == false and (@contents_showed or
        $game_system.map_interpreter.running? == false) and
        (Input.trigger?(Input::L) or Input.trigger?(Input::R)) and
        not $game_player.message_history.empty?
      history_start
    end
    if @h_window.active
      if @h_window.opacity < 255
        @h_window.opacity += 24
        @h_window.contents_opacity += 24
        @bar.opacity += 24
        return
      end
      history_update
      return
    end
    # メッセージ履歴消去中の場合
    if @h_window.opacity > 0
      # 透過度を増やす
      @h_window.opacity -= 48
      @h_window.contents_opacity -= 48
      @bar.opacity -= 48
      # メッセージ履歴が完全透過状態になった場合
      if @h_window.opacity == 0
        @h_window.visible = false
        @h_window.contents.dispose
        @bar.bitmap.dispose
        @bar.dispose
        if @contents_showed == false
          $game_temp.message_window_showing = false
        end
      end
      return
    end
    super
    # 吹き出し表示の場合、ウィンドウ位置設定
    window_position if @event != nil
    # フェードインの場合
    if @fade_in
      self.contents_opacity += 24
      @face.opacity += 24 if FADE
      if @input_number_window != nil
        @input_number_window.contents_opacity += 24
      end
      if self.contents_opacity == 255
        @fade_in = false
      end
    end
    # 数値入力中の場合
    if @input_number_window != nil
      @input_number_window.update
      # 決定
      if Input.trigger?(Input::C)
        if @push_enter
          self.pause = false
          @push_enter = false
          @contents_showed = false
          return
        end
        $game_system.se_play($data_system.decision_se)
        $game_variables[$game_temp.num_input_variable_id] =
                                                  @input_number_window.number
        $game_map.need_refresh = true
        # 数値入力ウィンドウを解放
        @input_number_window.dispose
        @input_number_window = nil
        terminate_message
      end
      return
    end
    # メッセージ表示中の場合
    if @contents_showing and @contents_showed == false
      if (ENTER and Input.trigger?(Input::C)) or
          (SHIFT >= ($DEBUG ? 0 : 1) and Input.press?(Input::SHIFT))
        @wait = 0
      end
      if @wait > 0
        @wait -= 1
        return if @wait > 0
      end
      refresh
      return
    end
    # メッセージ表示終了の場合
    if @contents_showed
      # 選択肢の表示中でなければポーズサインを表示
      if $game_temp.choice_max == 0
        self.pause = true
      end
      # キャンセル
      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
          $game_system.se_play($data_system.cancel_se)
          $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
          terminate_message
        end
      end
      # 決定
      if Input.trigger?(Input::C)
        if @push_enter
          self.pause = false
          @push_enter = false
          @contents_showed = false
          return
        end
        if $game_temp.choice_max > 0
          $game_system.se_play($data_system.decision_se)
          $game_temp.choice_proc.call(self.index)
        end
        terminate_message
      end
      if SHIFT == 2 and Input.press?(Input::SHIFT) and
          $game_temp.choice_max == 0
        if @push_enter
          self.pause = false
          @push_enter = false
          @contents_showed = false
          return
        end
        terminate_message
      end
      if @contents_close and $game_temp.choice_max == 0
        if $game_temp.choice_max > 0
          $game_system.se_play($data_system.decision_se)
          $game_temp.choice_proc.call(self.index)
        end
        terminate_message
      end
      return
    end
    # フェードアウト中以外で表示待ちのメッセージか選択肢がある場合
    if @fade_out == false and $game_temp.message_text != nil
      @contents_showing = true
      $game_temp.message_window_showing = true
      reset_window
      text_initialize
      self.visible = true
      self.contents_opacity = 0
      @face.bitmap = nil
      @face.visible = true
      if FADE
        @face.opacity = 0
      else
        @face.opacity = 255
      end
      if @input_number_window != nil
        @input_number_window.contents_opacity = 0
      end
      @fade_in = true
      refresh
      Graphics.frame_reset
      return
    end
    # 表示すべきメッセージがないが、ウィンドウが可視状態の場合
    if self.visible
      @fade_out = true
      self.opacity -= 48
      @face.opacity -= 48
      if self.opacity == 0
        self.visible = false
        @face.visible = false
        @body.visible = false if @body_visible == false
        @fade_out = false
        $game_temp.message_window_showing = false
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 制御文字処理
  #--------------------------------------------------------------------------
  def control(c)
    # \\ の場合
    if c == "\000"
      # 本来の文字に戻す
      c = "\\"
      return true
    end
    # \C[n] の場合
    if c == "\001"
      c_change
      return false
    end
    # \G の場合
    if c == "\002"
      gold
      return false
    end
    # \S[n] の場合
    if c == "\003"
      @text.sub!(/\[(\d+)\]/, "")
      @speed = $game_player.message_speed * $1.to_i
      return false
    end
    # \. の場合
    if c == "\004"
      @wait = 10
      c.sub!("\004", "")
      return true
    end
    # \: の場合
    if c == "\005"
      @wait = 20
      c.sub!("\005", "")
      return true
    end
    # \| の場合
    if c == "\006"
      @wait = 40
      c.sub!("\006", "")
      return true
    end
    # \! の場合
    if c == "\010"
      self.pause = true
      @push_enter = true
      @contents_showed = true
      c.sub!("\010", "")
      return true
    end
    # \> の場合
    if c == "\016"
      @temp_speed = @speed
      @speed = 0
      return false
    end
    # \< の場合
    if c == "\017"
      @speed = @temp_speed
      c.sub!("\017", "")
      return true
    end
    # \^ の場合
    if c == "\020"
      @contents_close = true
      return false
    end
    # \I の場合
    if c == "\021"
      @i = @x - @fi
      if @y >= $game_temp.choice_start
        @i = @x - @fi - 8
      end
      return false
    end
    # \LT の場合
    if c == "\022"
      @i = @x = @fi + 4
      return false
    end
    # \CT の場合
    if c == "\023"
      @text[(/(.+?)\n/)]
      width = max_width($1)[0]
      @x = (@fi + self.contents.width - width) / 2
      return false
    end
    # \RT の場合
    if c == "\024"
      @text[(/(.+?)\n/)]
      width = max_width($1)[0]
      @x = self.contents.width - width - 4
      return false
    end
    # \F[n] の場合
    if c == "\025"
      s_change
      return false
    end
    # \A[n,m] の場合
    if c == "\026"
      @text.sub!(/\[(\-*\d+),(\d+)\]/, "")
      actor($1.to_i, $2.to_i)
      return false
    end
    # \R[n,m] の場合
    if c == "\027"
      @text.sub!(/\[(.+?),(.+?)\]/) { rubi_set($1, $2) }
      return false
    end
    # \O[i] の場合
    if c == "\030"
      @text.sub!(/\[(.+?)\]/, "")
      letter($1.to_i)
      return false
    end
    # <B> の場合
    if c == "\031"
      self.contents.font.bold = true
      return false
    end
    # </B> の場合
    if c == "\033"
      self.contents.font.bold = false
      return false
    end
    # <I> の場合
    if c == "\034"
      self.contents.font.italic = true
      return false
    end
    # </I> の場合
    if c == "\035"
      self.contents.font.italic = false
      return false
    end
    # \X[n,m,o] の場合
    if c == "\036"
      @text.sub!(/\[(.+?),(.+?),(.+?)\]/, "")
      show_body($1,$2,$3)
      return false
    end
    # \M[n,m] の場合
    if c == "\037"
      @text.sub!(/\[(\-*\d+),(.+?)\]/, "")
      show_name($1,$2)
      return false
    end
    # \* の場合
    if c == "\d"
      c.sub!("\d", "")
      @body_visible = false
      return false
    end
    # 改行文字の場合
    if c == "\n"
      new_line
      return false
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 半身圖表示
  #--------------------------------------------------------------------------
  def show_body(name,x=0,y=0)
    @body_visible = true
    @body.bitmap.clear
    @body.bitmap = Bitmap.new("Graphics/Battlers/"+name)
    @body.opacity = 0
    @body.x = x.to_i
    @body.y = y.to_i
    @body.z = self.z - 1
    @body.visible = true
  end
  #--------------------------------------------------------------------------
  # ● 姓名表示
  #--------------------------------------------------------------------------
  def show_name(name_color,name_text)
    color = name_color.to_i 
    text = name_text.to_s
    w = text.size * 11
    xn = self.x
    yn = self.y >= 40 ? self.y - 40 : self.y + self.height
    @name_window = Window_Name.new(xn, yn, w)
    @name_window.z = self.z + 1
    @name_airtext = Window_AirText.new(xn-16, yn + 8, text, color, w+32)
    @name_airtext.z = self.z + 2
  end
  #--------------------------------------------------------------------------
  # ● カーソルの矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index >= 0
      n = @c_h + @py - ($game_temp.choice_max - 1) * 32
      cw = self.width-32-@fi-8
      self.cursor_rect.set(@fi+4, n + @index * 32, cw, 32)
    else
      self.cursor_rect.empty
    end
  end
end
#==============================================================================
# ■ Window_Name
#==============================================================================
class Window_Name < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化窗口
  #--------------------------------------------------------------------------
  def initialize(x, y, width)
    super(x, y, width, 40)
    self.contents = nil
    self.back_opacity = 160
  end
end

#==============================================================================
# ■ Window_AirText
#==============================================================================
class Window_AirText < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化窗口
  #--------------------------------------------------------------------------
  def initialize(x, y, designate_text, color, cw)
    super(x, y-16, cw, 56)
    self.opacity = 0
    self.back_opacity = 0
    self.contents = Bitmap.new(self.width - 32, self.height - 32)
    w = self.contents.width
    h = self.contents.height
    self.contents.font.size = 22
    self.contents.font.color = text_color(color)
    self.contents.draw_text(0, 0, w, h, designate_text, 1)
  end
end


愚零鬥武多 在 周一 9月 15, 2008 4:37 pm 作了第 5 次修改
愚零鬥武多
愚零鬥武多
不正常人類研究中心自慰隊員
不正常人類研究中心自慰隊員

文章數 : 421
注冊日期 : 2008-04-06

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  Q—S.T. 周五 五月 23, 2008 7:38 pm

萬分感激...

不過請問有沒有方法在讓指令不會影響到對話顯示的情況使用?
呃...也就是說忽視"顯示對話"裡面的框架, 是採用實際設定的對話框大小來換行

還有半身圖有辦法自行決定何時消失嗎?每顯示一次對話半身圖就閃一次總覺得怪怪的@@...
Q—S.T.
Q—S.T.
精通豆漿拳的正義漢
精通豆漿拳的正義漢

文章數 : 326
注冊日期 : 2008-04-21

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  愚零鬥武多 周五 五月 23, 2008 9:24 pm

Q—S.T. 寫到:萬分感激...

不過請問有沒有方法在讓指令不會影響到對話顯示的情況使用?
呃...也就是說忽視"顯示對話"裡面的框架, 是採用實際設定的對話框大小來換行

還有半身圖有辦法自行決定何時消失嗎?每顯示一次對話半身圖就閃一次總覺得怪怪的@@...

第一個問題我完全看不懂(倒....

第二個問題既然這樣你乾脆就在顯示文字之前用內建指令顯示圖片放入你想要的圖片
不想要顯示就直接讓圖片消失這樣最好控制而且又自然

顯示圖片指令強加在對話控制裡就一定會有這種瞬間切換的現象(就連齒車之城的對話腳本顯示臉圖也是如此)
雖然也可以在文字裡加控制碼作手動消除的動作,但一般都是人物說完對話才會有消失的情形,所以加了沒意義
就算加了,如果輸入文字後忘記輸入消除控制碼圖片就會消不掉....消不掉就變成程式上的一個bug
因此這樣乾脆就用圖片來作顯示就好了
(因為顯示圖片z的深度是低於對話框,為了解決臉圖的z深度要高於對話框的問題才有使用腳本的必要)
愚零鬥武多
愚零鬥武多
不正常人類研究中心自慰隊員
不正常人類研究中心自慰隊員

文章數 : 421
注冊日期 : 2008-04-06

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  Q—S.T. 周五 五月 23, 2008 10:11 pm

愚零鬥武多 寫到:
第一個問題我完全看不懂(倒....

第二個問題既然這樣你乾脆就在顯示文字之前用內建指令顯示圖片放入你想要的圖片
不想要顯示就直接讓圖片消失這樣最好控制而且又自然

顯示圖片指令強加在對話控制裡就一定會有這種瞬間切換的現象(就連齒車之城的對話腳本顯示臉圖也是如此)
雖然也可以在文字裡加控制碼作手動消除的動作,但一般都是人物說完對話才會有消失的情形,所以加了沒意義
就算加了,如果輸入文字後忘記輸入消除控制碼圖片就會消不掉....消不掉就變成程式上的一個bug
因此這樣乾脆就用圖片來作顯示就好了


第一個問題如下圖所示
對話框腳本相關 Tet11
召喚獸精華區有提到似乎可以調整文字的換行, 但是沒相關教學Orz


第二個問題
其實原本是想要臉圖和半身圖一起綁定, 臉圖有變半身圖就跟著改變這樣...

既然如此...可以請教一下對話顯示中途 改變/消除圖片顯示 的語法嗎@@?
Q—S.T.
Q—S.T.
精通豆漿拳的正義漢
精通豆漿拳的正義漢

文章數 : 326
注冊日期 : 2008-04-21

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  愚零鬥武多 周日 五月 25, 2008 8:41 pm

第一個問題齒車之城的腳本本來就有這功能了(太混了吧?藍藍路)
使用\p即可防止換行

第二個問題有在上兩樓作修改rgss,腳本請再重複製即可
使用\D消去半身圖
但不用此命令圖片會一直存在,除非開選單
愚零鬥武多
愚零鬥武多
不正常人類研究中心自慰隊員
不正常人類研究中心自慰隊員

文章數 : 421
注冊日期 : 2008-04-06

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  Q—S.T. 周日 五月 25, 2008 9:23 pm

愚零鬥武多 寫到:第一個問題齒車之城的腳本本來就有這功能了(太混了吧?藍藍路)
使用\p即可防止換行

第二個問題有在上兩樓作修改rgss,腳本請再重複製即可
使用\D消去半身圖
但不用此命令圖片會一直存在,除非開選單
再次感謝...

還有就是對不起,
我應該養成先閱讀使用說明書的好習慣. 給您造成無謂的困擾...|||Orz



------------題外------------
藍藍路變成我的綽號了嗎(; ゚д゚)
Q—S.T.
Q—S.T.
精通豆漿拳的正義漢
精通豆漿拳的正義漢

文章數 : 326
注冊日期 : 2008-04-21

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  愚零鬥武多 周一 五月 26, 2008 12:48 am

Q—S.T. 寫到:
再次感謝...

還有就是對不起,
我應該養成先閱讀使用說明書的好習慣. 給您造成無謂的困擾...|||Orz



------------題外------------
藍藍路變成我的綽號了嗎(; ゚д゚)

to Q—S.T
嗯,不會,舉手之勞而已@@
話說我也藉由您這次的發問大致了解到菜市場對話框是在搞啥了(以前根本連摸都沒摸過)
所以解答問題對在下而言也是有好處的

------------題外------------
藍藍路?
愚零鬥武多
愚零鬥武多
不正常人類研究中心自慰隊員
不正常人類研究中心自慰隊員

文章數 : 421
注冊日期 : 2008-04-06

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  Q—S.T. 周一 五月 26, 2008 10:26 pm

啊, 不好意思, 我測試時用了\D圖片無法消除, 是哪裡出錯了嗎@@



愚零鬥武多 寫到:
------------題外------------
藍藍路?
這是一切的原點
Q—S.T.
Q—S.T.
精通豆漿拳的正義漢
精通豆漿拳的正義漢

文章數 : 326
注冊日期 : 2008-04-21

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  愚零鬥武多 周二 五月 27, 2008 1:02 am

Q—S.T. 寫到:啊, 不好意思, 我測試時用了\D圖片無法消除, 是哪裡出錯了嗎@@

這是一切的原點

嗯,樓上腳本又修改過,麻煩再試一次吧@@
之前的是全部整段對話講完才會消失,就算插在文章中間也一樣
很抱歉沒有兼顧到您的需求Orz

麥當勞叔叔真是多才多藝啊,還是個格鬥高手?
誠心建議
您乾脆改名為藍藍路好了,知名度會大增喔XD
愚零鬥武多
愚零鬥武多
不正常人類研究中心自慰隊員
不正常人類研究中心自慰隊員

文章數 : 421
注冊日期 : 2008-04-06

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  Q—S.T. 周三 五月 28, 2008 10:37 pm

愚零鬥武多 寫到:
嗯,樓上腳本又修改過,麻煩再試一次吧@@
之前的是全部整段對話講完才會消失,就算插在文章中間也一樣
很抱歉沒有兼顧到您的需求Orz

麥當勞叔叔真是多才多藝啊,還是個格鬥高手?
誠心建議
您乾脆改名為藍藍路好了,知名度會大增喔XD
不會不會, 我才是一直在麻煩您Orz

這個....請問可以再問一個問題嗎, 該怎麼控制圖片(或者視窗)的顯現速度@@?
因為您設定過後的腳本圖片是一瞬間就冒出來, 我希望是和原本的顯示方式一樣(從透明漸變到不透明)


============================
我充其量不過是信徒而已, 無法和本尊並駕齊驅的@@
所以基本上我是來傳教...(誤
Q—S.T.
Q—S.T.
精通豆漿拳的正義漢
精通豆漿拳的正義漢

文章數 : 326
注冊日期 : 2008-04-21

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  愚零鬥武多 周四 五月 29, 2008 9:22 am

Q—S.T. 寫到:
不會不會, 我才是一直在麻煩您Orz

這個....請問可以再問一個問題嗎, 該怎麼控制圖片(或者視窗)的顯現速度@@?
因為您設定過後的腳本圖片是一瞬間就冒出來, 我希望是和原本的顯示方式一樣(從透明漸變到不透明)


============================
我充其量不過是信徒而已, 無法和本尊並駕齊驅的@@
所以基本上我是來傳教...(誤

樓上腳本已修改過圖片顯示消失淡入淡出的效果,麻煩再試一次吧

老實說藍藍路洗腦對在下是完全無效的(啥?
因為我本來就有這種傾向,屬於不正常人類研究中心的一份子
只有正常人才會受影響XD
愚零鬥武多
愚零鬥武多
不正常人類研究中心自慰隊員
不正常人類研究中心自慰隊員

文章數 : 421
注冊日期 : 2008-04-06

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  Q—S.T. 周日 6月 01, 2008 1:41 am

不好意思...把舊文推上來...Orz
現在又有兩個問題

1.
對話框腳本相關 Test310
只要字體放大就會讓姓名框延長,請問有沒有辦法讓兩者不會互相影響(試過固定姓名框大小但是名字不會置中...Orz)
還有就是這腳本字體是"一起"放大的,有辦法只放大其中一小段字嗎?





2.
對話框腳本相關 Test10
出現選項時,如果使用臉圖就會被選項的光棒蓋掉


請問可以調整成2003這種形式嗎?↓
對話框腳本相關 Test210
Q—S.T.
Q—S.T.
精通豆漿拳的正義漢
精通豆漿拳的正義漢

文章數 : 326
注冊日期 : 2008-04-21

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  Q—S.T. 周日 9月 14, 2008 6:19 pm

上一篇不小心把回覆按成了編輯...|||Orz
Q—S.T.
Q—S.T.
精通豆漿拳的正義漢
精通豆漿拳的正義漢

文章數 : 326
注冊日期 : 2008-04-21

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  愚零鬥武多 周一 9月 15, 2008 4:45 pm

請再去前頁重新複製修改過的RGSS代碼貼上

事件寫法:
對話框腳本相關 Fuck0110
使用效果:
對話框腳本相關 Fuck0210
愚零鬥武多
愚零鬥武多
不正常人類研究中心自慰隊員
不正常人類研究中心自慰隊員

文章數 : 421
注冊日期 : 2008-04-06

回頂端 向下

對話框腳本相關 Empty 回復: 對話框腳本相關

發表  Q—S.T. 周一 9月 15, 2008 10:17 pm

再度謝過...感激不盡
Q—S.T.
Q—S.T.
精通豆漿拳的正義漢
精通豆漿拳的正義漢

文章數 : 326
注冊日期 : 2008-04-21

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章