Project1

标题: 如何文字从右向左显示???? [打印本页]

作者: zulmat    时间: 2009-3-22 19:57
标题: 如何文字从右向左显示????
一般RMXP中我们的文字都从左向右出显示,可以不可以从右向左显示~
希望RMXP高手帮个忙~~~ [LINE]1,#dddddd[/LINE]此贴于 2009-3-22 21:03:34 被版主redant提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]此贴于 2009-3-23 7:33:02 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]版务信息:版主帮忙结贴~
作者: 凌辰    时间: 2009-3-22 20:01
http://rpg.blue/web/htm/news558.htm
作者: zulmat    时间: 2009-3-22 20:21
一般汉字从左向右写的~~
我要的是《????示显左向右从字文何如》
作者: zulmat    时间: 2009-3-22 20:25
我的一个少数民族朋友想那样弄,他们的文字是从右向左写的,我想帮他~~ [LINE]1,#dddddd[/LINE]版主对此帖的评论:『请擅用编辑功能避免连贴』,积分『-0』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: redant    时间: 2009-3-23 05:03
Window_Message里
# 描绘文字
        self.contents.draw_text(400 + x, 32 * y, 40, 32, c)
        # x 为要描绘文字的加法运算
        x -= self.contents.text_size(c).width


效果挺雷人的
LZ 确定是这种效果? [LINE]1,#dddddd[/LINE]系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~ [LINE]1,#dddddd[/LINE]版主对此帖的评论:『考虑不周,非正确答案。』,积分『-360』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: 天使喝可乐    时间: 2009-3-23 20:11
林子大了什么鸟都有....

LZ的少数民族朋友好强大,他做游戏的时候岂不是很费劲?(软件是从左向右的吧、输入时也是从左向右的吧...) [LINE]1,#dddddd[/LINE]版主对此帖的评论:『无关回复- -』,积分『-20』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: 苏小脉    时间: 2009-3-23 21:08
以下引用天使喝可乐于2009-3-23 12:11:34的发言:

(软件是从左向右的吧、输入时也是从左向右的吧...)

redant 提供的那段代码就能让从左向右输入的对话框文字从右向左显示(不过 ASCII 范围内的字符也会被反向输出) [LINE]1,#dddddd[/LINE]版主对此帖的评论:『前辈早安哟~』,积分『-0』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: hitlerson    时间: 2009-3-23 21:38
以下引用苏小脉于2009-3-23 13:08:49的发言:


以下引用天使喝可乐于2009-3-23 12:11:34的发言:

(软件是从左向右的吧、输入时也是从左向右的吧...)


redant 提供的那段代码就能让从左向右输入的对话框文字从右向左显示(不过 ASCII 范围内的字符也会被反向输出)



不就是个消息窗口里嘛,不要想这么多了~
作者: 天圣的马甲    时间: 2009-3-23 22:53
啊{/hx}惊现六脉神剑前辈,您好~~
“ASCII 范围内的字符也会被反向输出”的意思是……?字母、符号和回车换行吗?
作者: zulmat    时间: 2009-3-27 19:10
苏小脉说的很对,还是反向输出了~不知道该怎么办了~~~请高手们帮个忙~
作者: 紫苏    时间: 2009-3-27 20:06
以下引用天圣的马甲于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
[LINE]1,#dddddd[/LINE]版主对此帖的认可:『正确答案』,积分『+360』。




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