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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: zulmat
打印 上一主题 下一主题

如何文字从右向左显示????

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
11
发表于 2009-3-27 20:06:10 | 只看该作者
以下引用天圣的马甲于2009-3-23 14:53:34的发言:

“ASCII 范围内的字符也会被反向输出”的意思是……?字母、符号和回车换行吗?

嗯~也包括数字
以下引用zulmat于2009-3-27 11:10:47的发言:

苏小脉说的很对,还是反向输出了~不知道该怎么办了~~~请高手们帮个忙~

你是想要汉字反向输出、字母数字正向输出吧?那可以这样:
class Window_Message < Window_Selectable
  
  alias initialize_old initialize
  
  def initialize
    initialize_old
    @ascii_str = ""

  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    x, y = self.contents.width - 1, 0
    @cursor_width = 0
    # 到选择项的下一行字
    if $game_temp.choice_start == 0
      x = 8
    end
    # 有等待显示的文字的情况下
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      # 限制文字处理
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) 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]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "\002" }
      # c 获取 1 个字 (如果不能取得文字就循环)
      while ((c = text.slice!(/./m)) != nil)
        # \\ 的情况下
        if c == "\000"
          # 还原为本来的文字
          c = "\\"
        end
        # \C[n] 的情况下
        if c == "\001"
          # 更改文字色
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          # 下面的文字
          next
        end
        # \G 的情况下
        if c == "\002"
          # 生成金钱窗口
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = 560 - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = 192
            else
              @gold_window.y = self.y >= 128 ? 32 : 384
            end
            @gold_window.opacity = self.opacity
            @gold_window.back_opacity = self.back_opacity
          end
          # 下面的文字
          next
        end
        # 另起一行文字的情况下
        if c == "\n"
          # 刷新选择项及光标的高
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          # y 加 1
          y += 1
          x = self.contents.width - 1
          # 移动到选择项的下一行
          if y >= $game_temp.choice_start
            x = 8
          end
          # 下面的文字
          next
        end
        # RGSS的字符串是按照 UTF-8 编码的
        # 这里获取的字符 c 如果范围在 0~0x7f 之间就是一个字节表示的 ASCII 字符
        char = c.unpack('C')[0]
        while c != "\n" && char >= 0x00 && char <= 0x7f
          # x 为要描绘文字的减法运算
          x -= self.contents.text_size(c).width
          # 添加 ASCII 字符到临时字符串中
          @ascii_str << c
          c = text.slice!(/./m)
          char = c.unpack('C')[0]
        end
        # 描绘文字
        if @ascii_str != ""
          # 描绘正向 ASCII 字符串
          self.contents.draw_text(x, 32 * y, 40 * @ascii_str.size, 32,            @ascii_str)
          # 多读取了一个字符,添加回 text
          text.insert(0, c)
          @ascii_str = ""
        else
          # x 为要描绘文字的减法运算
          x -= self.contents.text_size(c).width
          self.contents.draw_text(x, 32 * y, 40, 32, c)
        end

      end
    end
    # 选择项的情况
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    # 输入数值的情况
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
  end
end

版主对此帖的认可:『正确答案』,积分『+360』。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-16 16:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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