Project1

标题: 文字使用图片效果用脚本显示不出? [打印本页]

作者: a111a    时间: 2017-4-10 15:22
标题: 文字使用图片效果用脚本显示不出?
这个脚本默认是用 选择菜单中的 显示图片才能显示出图片
我使用脚本来用就没办法显示出来了?
请问问题出错在哪?


#==========================================================================
# Dump_Font
#--------------------------------------------------------------------------
# Fontの属性情報をdumpできるように保存するクラス
# Bitmap#font=()へ引き渡す際はto_fontメソッドを用いる
#--------------------------------------------------------------------------
# ver.1.00(05/10/06) by 箱入小屋 http://aea.to/hako/
#==========================================================================

class Dump_Font
  # 初期化
  #  font : Fontオブジェクト
  def initialize(font)
    @name = font.name
    @size = font.size
    @bold = font.bold
    @italic = font.italic
    @color = Color.new(font.color.red, font.color.green, font.color.blue,
                       font.color.alpha)
  end
  
  # Fontオブジェクトに変換して返す
  def to_font
    font = Font.new(@name, @size)
    font.bold = @bold
    font.italic = @italic
    font.color = @color
    return font
  end
end


#==========================================================================
# text_picture
#--------------------------------------------------------------------------
# イベントコマンド「スクリプト」でメソッド「text_picture」を呼び出した後、
# イベントコマンド「ピクチャの表示」で表示します。
# クラス「Dump_Font」が必要です。
#--------------------------------------------------------------------------
# ver 1.03 (05/10/08) by 箱入小屋 http://aea.to/hako/
#==========================================================================

class Interpreter
  #--------------------------------------------------------------------------
  # ● 文字列を「ピクチャ」として表示
  #   text : 文字列
  #   font : フォント(Font) *省略可
  #--------------------------------------------------------------------------
  def text_picture(text, font = nil)
    if font.is_a?(Font) and not Font.exist?(font.name)
      #◆ フォントが存在しない場合のフォント名
      font.name = ["黑体","隶书","MS PMincho","PMingLiU","新細明體","細明體","標楷體","宋体"]
    elsif font.nil?
      font = Font.new
      #◆ フォントを指定しなかった場合のフォント
      font.name = ["黑体","隶书","MS PMincho","PMingLiU","新細明體","細明體","標楷體","宋体"] # フォント名
      font.size = 22                      # サイズ
      font.bold = false                   # ボールド(太字)フラグ
      font.italic = false                 # イタリック(斜体)フラグ
      font.color = Color.new(255,255,255) # フォントカラー(R, G, B)
    end
    @draw_text = [1, text, Dump_Font.new(font)]
    return true
  end
  #--------------------------------------------------------------------------
  # ● ピクチャの表示(再定義)
  #--------------------------------------------------------------------------
  alias text_picture_command231 command_231
  def command_231
    unless @draw_text.nil?
      @parameters[1] = @draw_text # picture_name
    end
    text_picture_command231
    @draw_text = nil
    return true
  end
end

class Sprite_Picture < Sprite
  #--------------------------------------------------------------------------
  # ● フレーム更新(再定義)
  #--------------------------------------------------------------------------
  alias text_picture_update update
  def update
    # text_picture(Interpreter)で文字列を指定された場合
    if @picture_name != @picture.name and @picture.name[0] == 1
      @picture_name = @picture.name # [id(1), text, Dump_Font]の配列
      self.bitmap = Bitmap.new(640, 100)
      font = @picture_name[2].to_font
      self.bitmap.font = font
      rect = self.bitmap.text_size(@picture_name[1])
      self.bitmap.dispose
      self.bitmap = Bitmap.new(rect.width, rect.height)
      self.bitmap.font = font
      self.bitmap.draw_text(rect, @picture_name[1])
    end
    text_picture_update

  end
end


#==========================================================================
# text_picture2 -- 複数行の文字列を「ピクチャ」として表示
#--------------------------------------------------------------------------
# イベントコマンド「スクリプト」で
#   text_picture2(text [, font [, align]])
# を呼び出した後、イベントコマンド「ピクチャの表示」で表示します。
# クラス「Dump_Font」が必要です。
#--------------------------------------------------------------------------
# ver 1.00 (05/10/10) by 箱入小屋 http://aea.to/hako/
#==========================================================================

class Sprite_Picture < Sprite
  #--------------------------------------------------------------------------
  # ◆ 定数
  #--------------------------------------------------------------------------
  # 行間の指定 (指定しない方は nil にしてください)
  LINE_SPACE_PIXEL = 10   # ピクセル数で指定
  LINE_SPACE_VARID = nil  # このIDのゲーム変数に代入されている値で指定
end

class Interpreter
  #--------------------------------------------------------------------------
  # ● 複数行の文字列を「ピクチャ」として設定
  #   text  : 文字列
  #   font  : フォント(Font) *省略可
  #   align : アラインメント (0..左揃え、1..中央揃え、2..右揃え) *省略可
  #--------------------------------------------------------------------------
  def text_picture2(text, font = nil, align = 0)
    if font.is_a?(Font) and not Font.exist?(font.name)
      #◆ フォントがない場合のフォント名
      font.name = ["黑体","隶书","MS PMincho","PMingLiU","新細明體","細明體","標楷體","宋体"]
    elsif font.nil?
      font = Font.new
      #◆ フォントを指定しなかった場合のフォント
      font.name = ["黑体","隶书","MS PMincho","PMingLiU","新細明體","細明體","標楷體","宋体"] # フォント名
      font.size = 22                      # サイズ
      font.bold = false                   # ボールド(太字)フラグ
      font.italic = false                 # イタリック(斜体)フラグ
      font.color = Color.new(255,255,255) # フォントカラー(R, G, B)
    end
    @draw_text = [2, text, Dump_Font.new(font), align]
    return true
  end
  #--------------------------------------------------------------------------
  # ● ピクチャの表示(再定義)
  #--------------------------------------------------------------------------
  alias text_picture2_command231 command_231
  def command_231
    unless @draw_text.nil?
      @parameters[1] = @draw_text
    end
    text_picture2_command231
    @draw_text = nil
    return true
  end
end

class Sprite_Picture < Sprite
  #--------------------------------------------------------------------------
  # ● フレーム更新(再定義)
  #--------------------------------------------------------------------------
  alias text_picture2_update update
  def update
    # Interpreter#text_picture2で文字列表示の情報を受け取った場合
    if @picture_name != @picture.name and @picture.name[0] == 2
      @picture_name = @picture.name  #=> [id(2), text, Dump_Font, align]
      self.bitmap = Bitmap.new(640, 480)
      self.bitmap.font = @picture_name[2].to_font
      y = 0
      space = LINE_SPACE_PIXEL ? LINE_SPACE_PIXEL : $game_variables[LINE_SPACE_VARID]
      @picture_name[1].each_line do |line|
        h = self.bitmap.text_size(line).height
        self.bitmap.draw_text(0, y, 640, h, line, @picture_name[3])
        y += h + space
      end
    end
    text_picture2_update
  end
end

作者: 芯☆淡茹水    时间: 2017-4-10 18:58
本帖最后由 芯☆淡茹水 于 2017-4-10 19:03 编辑

用脚本 $game_screen.pictures[number].show ,已经绕过了事件解释器里新定义的那个什么图片显示文字,,
用 command_231貌似也不行,没设置图片的编号,原点,坐标什么的。你可以在用 command_231 显示之前把 @parameters 全部依照格式赋值一遍,
这貌似又太麻烦,得不偿失。只能说这个东西比较蛋疼。




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