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

Project1

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

[已经解决] 請問在遊戲中要怎樣調整字體

[复制链接]

Lv1.梦旅人

梦石
0
星屑
165
在线时间
110 小时
注册时间
2013-2-8
帖子
65
跳转到指定楼层
1
发表于 2014-5-24 08:28:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 机器灰 于 2014-5-24 08:35 编辑

注:這裡的「繁體中文」是通過字體實現的,誰能告訴我怎麼做啊!
就像這樣:

QQ截图20140524082638.jpg (406.95 KB, 下载次数: 32)

QQ截图20140524082638.jpg

QQ截图20140524082654.jpg (406.59 KB, 下载次数: 30)

QQ截图20140524082654.jpg

QQ截图20140524082721.jpg (405.34 KB, 下载次数: 35)

QQ截图20140524082721.jpg
https://rpg.blue/https://rpg.blue/data/attachment/album/201510/24/113459x4144bvq34nn4w2v.gif
[url=http://tieba.baidu.com/p/4108401126]无限期大坑《In Distress》0.3.0预告[/url]

Lv4.逐梦者 (版主)

梦石
1
星屑
6036
在线时间
2649 小时
注册时间
2013-8-23
帖子
2315

开拓者

2
发表于 2014-5-24 09:23:32 | 只看该作者
本帖最后由 鑫晴 于 2014-5-24 10:03 编辑

事件脚本:

如果选择[简体]
    Font.default_name = ["XXX"]
如果选择[繁体]
    Font.default_name = ["XXX"]

XXX为字体名字,可填写多个字体,避免出错,举例:

RUBY 代码复制
  1. Font.default_name = ["雅黑宋体", "黑体"]        #如果"雅黑宋体"丢失,则加载"黑体"
  2. Font.default_size = 18                        #字号改为18


注意,最好把字体放进工程内,避免字体丢失!



自己测试了一下发现,他不是瞬间就处理完成的,要刷新事件后(比如打开菜单再返回)才会更换字体。
同求刷新语句....



回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

3
发表于 2014-5-24 11:55:06 | 只看该作者
本帖最后由 taroxd 于 2014-5-25 14:05 编辑
鑫晴 发表于 2014-5-24 09:23
事件脚本:

如果选择[简体]


(未测试)

  1. SceneManager.scene.instance_variable_get(:@message_window).contents.font.name = Font.default_name
复制代码

点评

快点去写一个对话中使用转义字符更改字体的脚本,我认真的(感觉这功能不错)。  发表于 2014-5-24 16:34
如果还用了什么对话中使用转义字符更改字体的脚本的话就会出问题了……  发表于 2014-5-24 16:32
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21337
在线时间
9371 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

4
发表于 2014-5-24 14:56:11 | 只看该作者
鑫晴 发表于 2014-5-24 09:23
事件脚本:

如果选择[简体]

插入下面的脚本即可(未经详细测试,不排除出现其他问题的可能)
  1. class Window_Message
  2.   alias m5_draw_text draw_text
  3.   def draw_text(*args)
  4.     contents.font.name = Font.default_name
  5.     m5_draw_text(*args)
  6.   end
  7. end
复制代码

评分

参与人数 1星屑 +20 梦石 +1 收起 理由
taroxd + 20 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22356
在线时间
8595 小时
注册时间
2011-12-31
帖子
3364
5
发表于 2014-5-24 17:13:39 | 只看该作者
你是要轉変繁/簡,還是同時使用繁簡字体(多種字体同時使用)?
那方法分別很大
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21337
在线时间
9371 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

6
发表于 2014-5-24 17:40:58 | 只看该作者
本帖最后由 喵呜喵5 于 2014-5-24 17:49 编辑
taroxd 发表于 2014-5-24 11:55
(未测试)


完工,副作用问题顺便也解决了…………

正则表达式不知道该怎么写简直忧伤…………
  1. =begin
  2. ===============================================================================
  3.   对话中切换字体 By喵呜喵5
  4. ===============================================================================

  5. 【说明】

  6.   对话中使用转义字符
  7.   
  8.     \font[字体的名字]
  9.   
  10.   即可切换之后显示的对话的字体
  11.   
  12.   字体将在对话进入新一页后恢复成默认字体
  13.   
  14. =end
  15. #==============================================================================
  16. # 脚本部分
  17. #==============================================================================
  18. $m5script = {} if $m5script.nil?
  19. $m5script["M5ChaFont"] = true
  20. class Window_Message
  21.   alias m5_20140524_reset_font_settings reset_font_settings
  22.   def reset_font_settings
  23.     m5_20140524_reset_font_settings
  24.     contents.font.name = Font.default_name   
  25.   end
  26.   def obtain_escape_param_plus(text)
  27.     my_text = text.slice!(/^\[.+?\]/).to_s rescue ""
  28.     my_text.slice!(-1)
  29.     my_text.slice!(0)
  30.     my_text
  31.   end
  32.   alias m5_20140524_process_escape_character process_escape_character
  33.   def process_escape_character(code, text, pos)
  34.     case code.upcase
  35.     when 'FONT'
  36.       contents.font.name = obtain_escape_param_plus(text)
  37.     else
  38.       m5_20140524_process_escape_character(code, text, pos)
  39.     end
  40.   end
  41. end
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

7
发表于 2014-5-24 18:49:33 | 只看该作者
喵呜喵5 发表于 2014-5-24 17:40
完工,副作用问题顺便也解决了…………

正则表达式不知道该怎么写简直忧伤………… ...


小小的bug(你自己看吧,文字输入这些)
更改前\font[]更改后

解决方式:
  1.   def obtain_escape_param_plus(text)
  2.     name = text.slice!(/^\[.*?\]/)[1..-2] rescue ""
  3.     Font.exist?(name) ? name : Font.default_name
  4.   end
复制代码
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21337
在线时间
9371 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

8
发表于 2014-5-24 19:06:51 | 只看该作者
taroxd 发表于 2014-5-24 18:49
小小的bug(你自己看吧,文字输入这些)
更改前\font[]更改后

原来slice!后真的可以跟负号啊……早知道就去试试了

另外虽然一开始就知道\font[]后面的字会被吃掉,直到现在我都还没理解为什么会被吃掉为什么加了一句判断字体的语句就不会被吃掉…………
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

9
发表于 2014-5-24 19:08:45 | 只看该作者
本帖最后由 taroxd 于 2014-5-24 19:17 编辑
喵呜喵5 发表于 2014-5-24 19:06
原来slice!后真的可以跟负号啊……早知道就去试试了

另外虽然一开始就知道\font[]后面的字会被吃掉,直 ...


大概因为把字体设为 "" 就吃掉了吧

我来继续歪楼,下面是ruby官方的例子~ slice!的区别就是会顺便删除掉而已
  1. a = "hello there"

  2. a[1]                   #=> "e"
  3. a[2, 3]                #=> "llo"
  4. a[2..3]                #=> "ll"

  5. a[-3, 2]               #=> "er"
  6. a[7..-2]               #=> "her"
  7. a[-4..-2]              #=> "her"
  8. a[-2..-4]              #=> ""

  9. a[11, 0]               #=> ""
  10. a[11]                  #=> nil
  11. a[12, 0]               #=> nil
  12. a[12..-1]              #=> nil

  13. a[/[aeiou](.)\1/]      #=> "ell"
  14. a[/[aeiou](.)\1/, 0]   #=> "ell"
  15. a[/[aeiou](.)\1/, 1]   #=> "l"
  16. a[/[aeiou](.)\1/, 2]   #=> nil

  17. a[/(?<vowel>[aeiou])(?<non_vowel>[^aeiou])/, "non_vowel"] #=> "l"
  18. a[/(?<vowel>[aeiou])(?<non_vowel>[^aeiou])/, "vowel"]     #=> "e"

  19. a["lo"]                #=> "lo"
  20. a["bye"]               #=> nil
复制代码

点评

已收藏,以及原来字体名为""时居然不是使用默认字体=口=…………  发表于 2014-5-24 19:13
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22356
在线时间
8595 小时
注册时间
2011-12-31
帖子
3364
10
发表于 2014-5-24 19:23:24 | 只看该作者
本帖最后由 tseyik 于 2014-5-24 19:26 编辑

文字效果脚本
機能説明

□ スキップ機能
  ・シフトキーを押しっぱなしにすることで、文章をメッセージを
   スキップすることができます。
  ・これはイベントが始まってからシフトキーを押すと機能します。
   押しながらイベントを開始しても、いきなりスキップすることはありません。
□跳躍功能
  ·是按住shift鍵,消息文本
  您可以跳過。

□ エフェクトの種類()效果類型
   0 : 文字が右にスライドしながら浮かび上がる演出を行います。字符向右浮上
   1 : 文字が下にスライドしながら浮かび上がる演出を行います。字符向下浮上
   2 : 文字が上にスライドしながら浮かび上がる演出を行います。字符向上浮上
   3 : 文字が左にスライドしながら浮かび上がる演出を行います。字符向左浮上
   4 : スライドせずに浮かび上がる演出を行います。
   5 : 文字が拡大していく演出が加えられます。字符小>大
   6 : 文字が回転する演出が加えられます。字符回転
   
   上記以外 : カスタム (スクリプト自作用)其他:自定義(自作腳本)

□ 制御文字
   \sp[n]   : 文章の表示速度を秒間 n 文字に変更します。字符一秒文字的顯示速度。
            
              デフォルト値は 60 です。默認值是60。
              0 にすると瞬間表示となります。0為瞬間表示
   \a       : スキップ機能や、決定キーによる文章の瞬間表示を無効化します。
   \et[n]   : エフェクトの種類を n 番に変更します。效果的第n個類型。
   \ed[n]   : エフェクトの時間を n フレームに変更します。效果的時間(n幀)。
   \font[n] : フォントを番号 n に対応したものに変更します。更改為對應n的字體。 85行中設定字体 FONTS = [nil, "MS ゴシック"]以,分開各字体
              0 でデフォルトのフォントに戻します。0回到默認字體 。
   \df      : エフェクト、フォント、文字色、文字サイズ、文章表示の速度を
              デフォルトの値に戻します。速度的效果,字體,字體顏色,字體大小,文本顯示/全回到預設値
   \fo[n]   : n フレームかけて文章のフェードアウトを行います。文章以n幀淡出了
              入力待ちをせずに、次のイベントコマンドへと移行します。不等待輸入,轉移到下一個事件命令。
   \set[n]  : 予め設定しておいた文字列 n 番に変換します。預先設定的字符串表示n次。
   \save    : 現在のエフェクト、フォント、文字色、文字サイズ、文章表示の速度を
              記憶します。
   \load    : \save で記憶した状態に変更します。

無題.rar (4.03 KB, 下载次数: 34)

RUBY 代码复制
  1. =begin
  2.  
  3.  ▼ メッセージエフェクト ver. 1.3.3
  4.  
  5.  RPGツクールVXAce用スクリプト
  6.  
  7.  制作 : 木星ペンギン
  8.  URL  : [url]http://woodpenguin.blog.fc2.com/[/url]
  9.  
  10. ------------------------------------------------------------------------------
  11.  概要
  12.  
  13.  □ メッセージを表示する際、ちょっとした演出を行います。
  14.  
  15. ------------------------------------------------------------------------------
  16.  機能説明
  17.  
  18.  □ スキップ機能
  19.   ・シフトキーを押しっぱなしにすることで、文章をメッセージを
  20.    スキップすることができます。
  21.   ・これはイベントが始まってからシフトキーを押すと機能します。
  22.    押しながらイベントを開始しても、いきなりスキップすることはありません。
  23.  
  24.  □ エフェクトの種類
  25.    0 : 文字が右にスライドしながら浮かび上がる演出を行います。
  26.    1 : 文字が下にスライドしながら浮かび上がる演出を行います。
  27.    2 : 文字が上にスライドしながら浮かび上がる演出を行います。
  28.    3 : 文字が左にスライドしながら浮かび上がる演出を行います。
  29.    4 : スライドせずに浮かび上がる演出を行います。
  30.    5 : 文字が拡大していく演出が加えられます。
  31.    6 : 文字が回転する演出が加えられます。
  32.    
  33.    上記以外 : カスタム (スクリプト自作用)
  34.  
  35.  □ 制御文字
  36.    \sp[n]   : 文章の表示速度を秒間 n 文字に変更します。
  37.               デフォルト値は 60 です。
  38.               0 にすると瞬間表示となります。
  39.    \a       : スキップ機能や、決定キーによる文章の瞬間表示を無効化します。
  40.    \et[n]   : エフェクトの種類を n 番に変更します。
  41.    \ed[n]   : エフェクトの時間を n フレームに変更します。
  42.    \font[n] : フォントを番号 n に対応したものに変更します。
  43.               0 でデフォルトのフォントに戻します。
  44.    \df      : エフェクト、フォント、文字色、文字サイズ、文章表示の速度を
  45.               デフォルトの値に戻します。
  46.    \fo[n]   : n フレームかけて文章のフェードアウトを行います。
  47.               入力待ちをせずに、次のイベントコマンドへと移行します。
  48.    \set[n]  : 予め設定しておいた文字列 n 番に変換します。
  49.    \save    : 現在のエフェクト、フォント、文字色、文字サイズ、文章表示の速度を
  50.               記憶します。
  51.    \load    : \save で記憶した状態に変更します。
  52.  
  53. =end
  54. module WdTk
  55. module MesEff
  56. #//////////////////////////////////////////////////////////////////////////////
  57. #
  58. # 設定項目
  59. #
  60. #//////////////////////////////////////////////////////////////////////////////
  61.   #--------------------------------------------------------------------------
  62.   # ● スキップの有効状態
  63.   #     false で無効化できます。
  64.   #--------------------------------------------------------------------------
  65.   SKIP = true
  66.  
  67.   #--------------------------------------------------------------------------
  68.   # ● エフェクトの種類のデフォルト値
  69.   #--------------------------------------------------------------------------
  70.   TYPE = 0
  71.  
  72.   #--------------------------------------------------------------------------
  73.   # ● エフェクトの時間のデフォルト値
  74.   #     エフェクトの種類を 5 以上にする場合は、増やしたほうがいいです。
  75.   #     (24 ~ 32 くらいがおすすめ)
  76.   #--------------------------------------------------------------------------
  77.   DURATION = 6
  78.  
  79.   #--------------------------------------------------------------------------
  80.   # ● フォント
  81.   #     配列にフォント名を入れ、制御文字で \font[n] と入れることで、
  82.   #     n 番目のフォントに変更されます。
  83.   #     0 はデフォルトに戻すのに使用します。
  84.   #--------------------------------------------------------------------------
  85.   FONTS = [nil, "MS ゴシック"]
  86.  
  87.   #--------------------------------------------------------------------------
  88.   # ● 文字列のセット
  89.   #     制御文字を入れる場合は、ダブルクォート(")ではなく
  90.   #     シングルクォート(')を使ってください。
  91.   #     例 : \set[0] で下記の文字列に置き換わります。
  92.   #--------------------------------------------------------------------------
  93.   ESC_SET = ['\a\sp[15]\ed[12]',     # 0
  94.              ]
  95.  
  96.   #--------------------------------------------------------------------------
  97.   # ● 文字スプライトへのエフェクト
  98.   #  ※ スクリプトが組める人向け
  99.   #     sprite   : 文字スプライト
  100.   #     duration : エフェクトの残り時間
  101.   #     max      : エフェクトの時間
  102.   #     type     : エフェクトの種類
  103.   #   スプライトの x, y, z, bitmap は変更しないでください。
  104.   #--------------------------------------------------------------------------
  105.   def self.effect(sprite, duration, max, type, pos)
  106.     case type
  107.     when 1,2,3,4
  108.       sprite.opacity = 256 * (max - duration) / max
  109.       origin = (2 + max * 2 / 3) * duration / max
  110.       case type
  111.       when 0; sprite.ox = origin
  112.       when 1; sprite.oy = origin
  113.       when 2; sprite.oy = -origin
  114.       when 3; sprite.ox = -origin
  115.       end
  116.     when 5,6
  117.       sprite.opacity = 256
  118.       m = (max - max / 4) ** 2
  119.       n = m - (max / 4) ** 2
  120.       return if n == 0
  121.       c = m - (duration - max / 4) ** 2
  122.       sprite.zoom_x = sprite.zoom_y = 1.0 * c / n
  123.       sprite.angle = 90.0 * (n - c) / n if type == 6
  124.     else # カスタム用
  125.  
  126.     end
  127.   end
  128. end
  129.  
  130. #//////////////////////////////////////////////////////////////////////////////
  131. #
  132. # 以降、変更する必要なし
  133. #
  134. #//////////////////////////////////////////////////////////////////////////////
  135.  
  136.   @material ||= []
  137.   @material << :MesEff
  138.   def self.include?(sym)
  139.     @material.include?(sym)
  140.   end
  141.  
  142. end
  143.  
  144. #==============================================================================
  145. # ■ Window_Message
  146. #==============================================================================
  147. class Window_Message
  148.   #--------------------------------------------------------------------------
  149.   # ○ オブジェクト初期化
  150.   #--------------------------------------------------------------------------
  151.   alias _wooden_meseff_initialize initialize
  152.   def initialize
  153.     @character_sprites = {}
  154.     _wooden_meseff_initialize
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● X 座標の設定
  158.   #--------------------------------------------------------------------------
  159.   def x=(x)
  160.     super
  161.     sx = self.x - x
  162.     @character_sprites.each_key {|sprite| sprite.x += sx } if sx != 0
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● Y 座標の設定
  166.   #--------------------------------------------------------------------------
  167.   def y=(y)
  168.     super
  169.     sy = self.y - y
  170.     @character_sprites.each_key {|sprite| sprite.y += sy } if sy != 0
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● Z 座標の設定
  174.   #--------------------------------------------------------------------------
  175.   def z=(z)
  176.     super
  177.     @character_sprites.each_key {|sprite| sprite.z = z }
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ○ 解放
  181.   #--------------------------------------------------------------------------
  182.   alias _wooden_meseff_dispose dispose
  183.   def dispose
  184.     _wooden_meseff_dispose
  185.     dispose_character_sprites
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 文字スプライトの解放
  189.   #--------------------------------------------------------------------------
  190.   def dispose_character_sprites
  191.     @character_sprites.each_key do |sprite|
  192.       sprite.bitmap.dispose if sprite.bitmap
  193.       sprite.dispose
  194.     end
  195.     @character_sprites.clear
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ● フォント設定のリセット
  199.   #--------------------------------------------------------------------------
  200.   def reset_font_settings
  201.     super
  202.     contents.font.name = Font.default_name
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ○ フラグのクリア
  206.   #--------------------------------------------------------------------------
  207.   alias _wooden_meseff_clear_flags clear_flags
  208.   def clear_flags
  209.     _wooden_meseff_clear_flags
  210.     clear_wooden_flags
  211.     @auto = false
  212.     @count = 0
  213.   end
  214.   #--------------------------------------------------------------------------
  215.   # ● オリジナルフラグのクリア
  216.   #--------------------------------------------------------------------------
  217.   def clear_wooden_flags
  218.     @effect_type = WdTk::MesEff::TYPE
  219.     @effect_duration = WdTk::MesEff::DURATION
  220.     @speed = 60
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ○ フレーム更新
  224.   #--------------------------------------------------------------------------
  225.   alias _wooden_meseff_update update
  226.   def update
  227.     _wooden_meseff_update
  228.     update_character_sprites
  229.     if $game_party.in_battle
  230.       @message_skip &&= $game_troop.interpreter.running?
  231.     else
  232.       @message_skip &&= $game_map.interpreter.running?
  233.     end
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● 文字スプライトの更新
  237.   #--------------------------------------------------------------------------
  238.   def update_character_sprites
  239.     @character_sprites.each do |sprite, params|
  240.       next if params.empty?
  241.       params[0] = (@show_fast ? 0 : params[0] - 1)
  242.       if params[0] > 0
  243.         WdTk::MesEff.effect(sprite, *params)
  244.       else
  245.         x = sprite.x - self.x - padding
  246.         y = sprite.y - self.y - padding
  247.         contents.blt(x, y, sprite.bitmap, sprite.src_rect)
  248.         sprite.bitmap.clear
  249.         sprite.visible = false
  250.         params.clear
  251.       end
  252.     end
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 制御文字の事前変換
  256.   #--------------------------------------------------------------------------
  257.   def convert_escape_characters(*)
  258.     result = super
  259.     result.gsub!(/\eSET\[(\d+)\]/i) { ESC_SET[$1.to_i].to_s.gsub(/\\/, "\e") }
  260.     result
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # ○ ファイバーのメイン処理
  264.   #--------------------------------------------------------------------------
  265.   alias _wooden_meseff_fiber_main fiber_main
  266.   def fiber_main
  267.     _wooden_meseff_fiber_main
  268.     dispose_character_sprites
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ○ 全テキストの処理
  272.   #--------------------------------------------------------------------------
  273.   alias _wooden_meseff_process_all_text process_all_text
  274.   def process_all_text
  275.     _wooden_meseff_process_all_text
  276.     Fiber.yield until @show_fast || @character_sprites.all? {|*,p| p.empty? }
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ○ 早送りフラグの更新
  280.   #--------------------------------------------------------------------------
  281.   alias _wooden_meseff_update_show_fast update_show_fast
  282.   def update_show_fast
  283.     return if @auto
  284.     _wooden_meseff_update_show_fast
  285.     @message_skip ||= WdTk::MesEff::SKIP && Input.trigger?(:A)
  286.     @show_fast ||= @message_skip && Input.press?(:A)
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● ウェイト (文章表示中)
  290.   #--------------------------------------------------------------------------
  291.   def wait_message(duration)
  292.     duration.times do
  293.       update_show_fast
  294.       return if @show_fast
  295.       Fiber.yield
  296.     end
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ○ 一文字出力後のウェイト
  300.   #--------------------------------------------------------------------------
  301.   alias _wooden_meseff_wait_for_one_character wait_for_one_character
  302.   def wait_for_one_character
  303.     while @count < 60
  304.       _wooden_meseff_wait_for_one_character
  305.       @count += @speed
  306.     end
  307.     @count -= 60
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # ○ 改ページ処理
  311.   #--------------------------------------------------------------------------
  312.   alias _wooden_meseff_new_page new_page
  313.   def new_page(text, pos)
  314.     self.contents_opacity = 255
  315.     _wooden_meseff_new_page(text, pos)
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # ☆ 通常文字の処理
  319.   #--------------------------------------------------------------------------
  320.   def process_normal_character(c, pos)
  321.     return super if @show_fast || @speed == 0
  322.     sprite = get_empty_sprite(pos)
  323.     sprite.bitmap.font = contents.font.dup
  324.     text_width = text_size(c).width
  325.     sprite.bitmap.draw_text(0, 0, text_width * 2, pos[:height], c)
  326.     pos[:x] += text_width
  327.     wait_for_one_character
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # ☆ 制御文字によるアイコン描画の処理
  331.   #--------------------------------------------------------------------------
  332.   def process_draw_icon(icon_index, pos)
  333.     return super if @show_fast || @speed == 0
  334.     sprite = get_empty_sprite(pos)
  335.     bitmap = Cache.system("Iconset")
  336.     rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  337.     sprite.bitmap.blt(0, 0, bitmap, rect)
  338.     pos[:x] += 24
  339.     wait_for_one_character
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ● 使用していない文字スプライトの取得
  343.   #--------------------------------------------------------------------------
  344.   def get_empty_sprite(pos)
  345.     sprite, = @character_sprites.find {|*,p| p.empty? }
  346.     if sprite
  347.       sprite.visible = true
  348.       if sprite.bitmap.height < pos[:height]
  349.         sprite.bitmap.dispose
  350.         sprite.bitmap = nil
  351.       end
  352.     else
  353.       sprite = Sprite.new(viewport)
  354.       sprite.z = self.z
  355.     end
  356.     sprite.bitmap ||= Bitmap.new(pos[:height], pos[:height])
  357.     params = []
  358.     params << @effect_duration << @effect_duration
  359.     params << @effect_type
  360.     params << pos.dup
  361.     @character_sprites[sprite] = params
  362.     sprite.x = self.x + self.padding + pos[:x]
  363.     sprite.y = self.y + self.padding + pos[:y]
  364.     sprite.ox = sprite.oy = 0
  365.     sprite.angle = 0
  366.     sprite.zoom_x = sprite.zoom_y = 1.0
  367.     sprite.opacity = 0
  368.     sprite
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ◯ 制御文字の処理
  372.   #--------------------------------------------------------------------------
  373.   alias _wooden_meseff_process_escape_character process_escape_character
  374.   def process_escape_character(code, text, pos)
  375.     case code.upcase
  376.     when '.'
  377.       wait_message(15) unless @show_fast
  378.     when '|'
  379.       wait_message(60) unless @show_fast
  380.     when 'SP'
  381.       @speed = obtain_escape_param(text)
  382.     when 'A'
  383.       @auto = true
  384.     when 'ET'
  385.       @effect_type = obtain_escape_param(text)
  386.     when 'ED'
  387.       @effect_duration = obtain_escape_param(text)
  388.     when 'FONT'
  389.       process_font(obtain_escape_param(text))
  390.     when 'DF'
  391.       process_default
  392.     when 'FO'
  393.       process_fadeout(obtain_escape_param(text))
  394.     when 'SAVE'
  395.       process_save
  396.     when 'LOAD'
  397.       process_load
  398.     else
  399.       _wooden_meseff_process_escape_character(code, text, pos)
  400.     end
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ● フォント変更の処理
  404.   #--------------------------------------------------------------------------
  405.   def process_font(index)
  406.     contents.font.name = WdTk::MesEff::FONTS[index] || Font.default_name
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ● デフォルトの処理
  410.   #--------------------------------------------------------------------------
  411.   def process_default
  412.     reset_font_settings
  413.     clear_wooden_flags
  414.     @line_show_fast = false
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ● フェードアウトの処理
  418.   #--------------------------------------------------------------------------
  419.   def process_fadeout(duration)
  420.     duration.times do |i|
  421.       self.contents_opacity = 256 * (duration - i - 1) / duration
  422.       Fiber.yield
  423.     end
  424.     @pause_skip = true
  425.   end
  426.   #--------------------------------------------------------------------------
  427.   # ● セーブの処理
  428.   #--------------------------------------------------------------------------
  429.   def process_save
  430.     @save_font            = contents.font.dup
  431.     @save_effect_type     = @effect_type
  432.     @save_effect_duration = @effect_duration
  433.     @save_speed           = @speed
  434.     @save_line_show_fast  = @line_show_fast
  435.   end
  436.   #--------------------------------------------------------------------------
  437.   # ● ロードの処理
  438.   #--------------------------------------------------------------------------
  439.   def process_load
  440.     contents.font    = @save_font.dup        if @save_font
  441.     @effect_type     = @save_effect_type     if @save_effect_type
  442.     @effect_duration = @save_effect_duration if @save_effect_duration
  443.     @speed           = @save_speed           if @save_speed
  444.     @line_show_fast  = @save_line_show_fast  if @save_line_show_fast != nil
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ☆ 入力待ち処理
  448.   #--------------------------------------------------------------------------
  449.   def input_pause
  450.     self.pause = true
  451.     wait(10)
  452.     until Input.trigger?(:B) || Input.trigger?(:C) || (@message_skip && Input.press?(:A))
  453.       Fiber.yield
  454.       @message_skip ||= WdTk::MesEff::SKIP && Input.trigger?(:A)
  455.     end
  456.     Input.update
  457.     self.pause = false
  458.   end
  459. end
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-2-4 18:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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