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

Project1

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

[已经解决] 修改事件中 显示选项框的位置

[复制链接]

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10079
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

跳转到指定楼层
1
发表于 2014-6-1 21:49:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
最好是可以用开关或者变量控制,修改选项框的位置,居中或者左上或者没变在对话框上面。

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

2
发表于 2014-6-1 21:56:20 | 只看该作者
本帖最后由 taroxd 于 2014-6-1 21:59 编辑

http://woodpenguin.web.fc2.com/rgss3/choice_ex.html
简单翻译所需要的用法:
  事件中注释“選択肢位置(x, y[, row])”
  x,y为坐标,row为最大行数(可选,不指定的话显示所有选择项)

RUBY 代码复制
  1. =begin
  2.  
  3.  ▼ 選択肢拡張 ver. 2.2
  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.   ・「キャンセルの場合」の処理は、無効以外を設定したものが適用され、
  26.      複数ある場合は後に設定された選択肢のものが適用されます。
  27.  
  28.  □ 選択肢の文章中に if(条件) と入れ、その条件が偽になると項目が表示されなくなります。
  29.   ・s でスイッチ、v で変数を参照できます。
  30.   ・「キャンセルの場合」の項目が表示されない場合、無効と同じ処理をします。
  31.  
  32.  □ 注釈に以下の文字列を入れることで、選択肢ウィンドウの表示位置を
  33.    一時的に変更することが出来ます。
  34.  
  35.     選択肢位置(x, y[, row])
  36.     
  37.       x   : ウィンドウを表示する X 座標。
  38.       y   : ウィンドウを表示する Y 座標。
  39.       row : 選択肢を表示する最大行数。
  40.             指定しない場合は、通常の最大行数を無視して
  41.             すべての選択肢が表示されます。
  42.  
  43.  □ 選択肢の文章中に en(条件) と入れ、その条件が偽になると項目が半透明で表示されます。
  44.  
  45.  □ 各項目の下に、注釈で以下の文字列を入れると、続きの文章を
  46.     項目のヘルプメッセージとしてカーソルを合わせたときに標示することができます。
  47.  
  48.     選択肢ヘルプ
  49.     
  50.  □ 詳細は下記のサイトを参照してください。
  51.  
  52.   [url]http://woodpenguin.web.fc2.com/rgss3/choice_ex.html[/url]
  53.  
  54. =end
  55. module WdTk
  56. module ChoiceEX
  57. #//////////////////////////////////////////////////////////////////////////////
  58. #
  59. # 設定項目
  60. #
  61. #//////////////////////////////////////////////////////////////////////////////
  62.   #--------------------------------------------------------------------------
  63.   # ● 選択肢の最大行数
  64.   #     選択肢を表示するウィンドウの行数の最大数です。
  65.   #     選択肢がこの数より小さければ、選択肢の数に合わせます。
  66.   #--------------------------------------------------------------------------
  67.   RowMax = 4
  68.  
  69.   #--------------------------------------------------------------------------
  70.   # ● 選択肢の位置記憶
  71.   #     前回表示した選択肢と全く同じ内容の選択肢を表示する場合、
  72.   #     カーソルの初期位置を前回選んだ項目にする機能です。
  73.   #     false で無効化できます。
  74.   #--------------------------------------------------------------------------
  75.   Store = true
  76.  
  77.   #--------------------------------------------------------------------------
  78.   # ● 選択肢ヘルプを読み取る文字列
  79.   #--------------------------------------------------------------------------
  80.   Help = "選択肢ヘルプ"
  81.  
  82. end
  83.  
  84. #//////////////////////////////////////////////////////////////////////////////
  85. #
  86. # 以降、変更する必要なし
  87. #
  88. #//////////////////////////////////////////////////////////////////////////////
  89.  
  90.   @material ||= []
  91.   @material << :ChoiceEX
  92.   def self.include?(sym)
  93.     @material.include?(sym)
  94.   end
  95.  
  96. end
  97.  
  98. #==============================================================================
  99. # ■ Game_Message
  100. #------------------------------------------------------------------------------
  101. #  文章や選択肢などを表示するメッセージウィンドウの状態を扱うクラスです。この
  102. # クラスのインスタンスは $game_message で参照されます。
  103. #==============================================================================
  104.  
  105. class Game_Message
  106.   #--------------------------------------------------------------------------
  107.   # ● 公開インスタンス変数
  108.   #--------------------------------------------------------------------------
  109.   attr_accessor :choice_x                 # 選択肢ウィンドウの表示 X 座標
  110.   attr_accessor :choice_y                 # 選択肢ウィンドウの表示 Y 座標
  111.   attr_accessor :choice_row_max           # 選択肢ウィンドウの表示行数
  112.   attr_accessor :choice_enables           # 選択肢の有効状態
  113.   attr_accessor :choice_help              # 選択肢のヘルプ
  114.   #--------------------------------------------------------------------------
  115.   # ○ クリア
  116.   #--------------------------------------------------------------------------
  117.   alias _wdtk_choice_clear clear
  118.   def clear
  119.     _wdtk_choice_clear
  120.     @choice_x = @choice_y = nil
  121.     @choice_row_max = WdTk::ChoiceEX::RowMax
  122.     @choice_enables = []
  123.     @choice_help = {}
  124.   end
  125. end
  126.  
  127. #==============================================================================
  128. # ■ Game_Interpreter
  129. #==============================================================================
  130. class Game_Interpreter
  131.   #--------------------------------------------------------------------------
  132.   # ☆ 選択肢のセットアップ
  133.   #--------------------------------------------------------------------------
  134.   def setup_choices(params)
  135.     result = []
  136.     add_choices(params, @index, result)
  137.     $game_message.choice_enables = $game_message.choices.collect do |c|
  138.       !c.slice!(/\s*en\((.+)\)/i) || choice_eval($1)
  139.     end
  140.     unless $game_message.choices.empty?
  141.       m = result.index($game_message.choice_cancel_type - 1)
  142.       $game_message.choice_enables << (!m || $game_message.choice_enables[m])
  143.       result << $game_message.choice_cancel_type - 1
  144.       $game_message.choice_proc = Proc.new {|n| @branch[@indent] = result[n] }
  145.     else
  146.       @branch[@indent] = -1
  147.     end
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 選択肢の追加
  151.   #--------------------------------------------------------------------------
  152.   def add_choices(params, i, result, d = 0)
  153.     params[0].each_with_index do |s, n|
  154.       choice = s.dup
  155.       next if choice.slice!(/\s*if\((.+)\)/i) && !choice_eval($1)
  156.       $game_message.choices << choice
  157.       result << n + d
  158.     end
  159.     if params[1] == 5 || (params[1] > 0 && result.include?(params[1] + d - 1))
  160.       $game_message.choice_cancel_type = params[1] + d
  161.     end
  162.     indent = @list[i].indent
  163.     loop do
  164.       i += 1
  165.       if @list[i].indent == indent
  166.         case @list[i].code
  167.         when 402 # [**] の場合
  168.           m = result.index(@list[i].parameters[0] + d)
  169.           get_help_texts(m, i + 1) if m
  170.         when 404 # 分岐終了
  171.           break
  172.         end
  173.       end
  174.     end
  175.     i += 1
  176.     add_choices(@list[i].parameters, i, result, d + 5) if @list[i].code == 102
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 分岐終了の場合
  180.   #--------------------------------------------------------------------------
  181.   def choice_eval(formula)
  182.     s, v = $game_switches, $game_variables
  183.     begin
  184.       Kernel.eval(formula)
  185.     rescue
  186.       msgbox "以下の条件判定でエラーが出ました。\n\n", formula
  187.       true
  188.     end
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● ヘルプ用テキストの取得
  192.   #--------------------------------------------------------------------------
  193.   def get_help_texts(b, i)
  194.     if @list[i].code == 108 && @list[i].parameters[0] == WdTk::ChoiceEX::Help
  195.       $game_message.choice_help[b] = []
  196.       loop do
  197.         i += 1
  198.         break if @list[i].code != 408
  199.         $game_message.choice_help[b] << @list[i].parameters[0]
  200.       end
  201.     end
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ◯ 注釈
  205.   #--------------------------------------------------------------------------
  206.   alias _wdtk_choice_command_108 command_108
  207.   def command_108
  208.     _wdtk_choice_command_108
  209.     @comments.each do |comment|
  210.       if comment =~ /選択肢位置\((\d+),\s*(\d+),?\s*(\d*)\)/
  211.         $game_message.choice_x = $1.to_i
  212.         $game_message.choice_y = $2.to_i
  213.         $game_message.choice_row_max = ($3.empty? ? 99 : $3.to_i)
  214.       end
  215.     end
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 分岐終了の場合
  219.   #--------------------------------------------------------------------------
  220.   def command_404
  221.     if next_event_code == 102
  222.       @branch[@indent] -= 5 if @branch.include?(@indent)
  223.       [url=home.php?mod=space&uid=370741]@Index[/url] += 1
  224.       command_skip
  225. #~     else
  226. #~       @branch.delete(@indent)
  227.     end
  228.   end
  229. end
  230.  
  231. #==============================================================================
  232. # ■ Window_ChoiceList
  233. #==============================================================================
  234. class Window_ChoiceList
  235.   #--------------------------------------------------------------------------
  236.   # ☆ 入力処理の開始
  237.   #--------------------------------------------------------------------------
  238.   def start
  239.     return unless close?
  240.     last_choices = @list.collect {|c| c[:name] }
  241.     update_placement
  242.     refresh
  243.     unless WdTk::ChoiceEX::Store && last_choices == $game_message.choices
  244.       select(0)
  245.     end
  246.     open
  247.     activate
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # ○ ウィンドウ位置の更新
  251.   #--------------------------------------------------------------------------
  252.   alias _wdtk_choice_update_placement update_placement
  253.   def update_placement
  254.     _wdtk_choice_update_placement
  255.     self.height = [height, fitting_height($game_message.choice_row_max)].min
  256.     if @message_window.y >= Graphics.height / 2
  257.       self.y = @message_window.y - height
  258.     else
  259.       self.y = @message_window.y + @message_window.height
  260.     end
  261.     self.x = $game_message.choice_x if $game_message.choice_x
  262.     self.y = $game_message.choice_y if $game_message.choice_y
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ☆ コマンドリストの作成
  266.   #--------------------------------------------------------------------------
  267.   def make_command_list
  268.     $game_message.choices.each_with_index do |choice, i|
  269.       add_command(choice, :choice, $game_message.choice_enables[i])
  270.     end
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ○ 項目の描画
  274.   #--------------------------------------------------------------------------
  275.   alias _wdtk_choice_draw_item draw_item
  276.   def draw_item(index)
  277.     @choice_enabled = command_enabled?(index)
  278.     _wdtk_choice_draw_item(index)
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● テキスト描画色の変更
  282.   #--------------------------------------------------------------------------
  283.   def change_color(color, enabled = true)
  284.     super(color, enabled && @choice_enabled)
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● キャンセルボタンが押されたときの処理
  288.   #--------------------------------------------------------------------------
  289.   def process_cancel
  290.     if $game_message.choice_enables[item_max]
  291.       super
  292.     else
  293.       Sound.play_buzzer
  294.     end
  295.   end
  296.   #--------------------------------------------------------------------------
  297.   # ☆ キャンセルハンドラの呼び出し
  298.   #--------------------------------------------------------------------------
  299.   def call_cancel_handler
  300.     $game_message.choice_proc.call(item_max)
  301.     close
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● ウィンドウを閉じる
  305.   #--------------------------------------------------------------------------
  306.   def close
  307.     @message_window.on_show_fast unless $game_message.choice_help.empty?
  308.     super
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # ● ヘルプウィンドウ更新メソッドの呼び出し
  312.   #--------------------------------------------------------------------------
  313.   def call_update_help
  314.     update_help if active && !$game_message.choice_help.empty?
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● ヘルプウィンドウの更新
  318.   #--------------------------------------------------------------------------
  319.   def update_help
  320.     @message_window.force_clear
  321.     if $game_message.choice_help.include?(index)
  322.       $game_message.texts.replace($game_message.choice_help[index])
  323.     else
  324.       $game_message.texts.clear
  325.     end
  326.   end
  327. end
  328.  
  329. #==============================================================================
  330. # ■ Window_Message
  331. #==============================================================================
  332. class Window_Message
  333.   #--------------------------------------------------------------------------
  334.   # ● 文章の標示を強制クリア
  335.   #--------------------------------------------------------------------------
  336.   def force_clear
  337.     @gold_window.close
  338.     @fiber = nil
  339.     close
  340.     if WdTk.include?(:MesEff)
  341.       @character_sprites.each do |sprite, params|
  342.         next if params.empty?
  343.         sprite.bitmap.clear
  344.         sprite.visible = false
  345.         params.clear
  346.       end
  347.     end
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● 文章を最後まで表示する
  351.   #--------------------------------------------------------------------------
  352.   def on_show_fast
  353.     @show_fast = true
  354.   end
  355. end

点评

这是论坛的bug啦,看图书馆的Q&A去。改成@index += 1 #是小写的  发表于 2014-12-19 18:59
223行显示出错,删了就没事了……为什么?  发表于 2014-12-19 18:56
怎么用? 選択肢位置(5, 5[, 2]) 这样在选项事件上面注释了也没效果...  发表于 2014-6-1 22:10

评分

参与人数 2星屑 +110 收起 理由
Sion + 100 ·
VIPArcher + 10 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10079
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

3
 楼主| 发表于 2014-6-1 22:20:33 | 只看该作者
本帖最后由 VIPArcher 于 2014-6-1 22:21 编辑
taroxd 发表于 2014-6-1 21:56
http://woodpenguin.web.fc2.com/rgss3/choice_ex.html
简单翻译所需要的用法:
  事件中注释“選択肢位置( ...


注释了也没效果,是什么情况?{:8_437:}

QQ图片20140601222828.jpg (25.33 KB, 下载次数: 32)

注释没写错吧?

注释没写错吧?

QQ图片20140601222858.jpg (19.64 KB, 下载次数: 33)

还是在原位

还是在原位

点评

了解,多谢。已经解决。话说现在的搜索有点烦啊。10秒一次。而且搜了好久也没找到我要的。  发表于 2014-6-1 22:29
实际输入时不需要输入中括号  发表于 2014-6-1 22:25
括在中括号里的表示可以省略的内容  发表于 2014-6-1 22:25
選択肢位置(1, 1)  发表于 2014-6-1 22:25
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22973
在线时间
8639 小时
注册时间
2011-12-31
帖子
3367
4
发表于 2014-6-1 22:28:10 | 只看该作者
事件中注释“選択肢位置(x, y[, row])”
  x,y为坐标(以点数左上為0,0),row为最大行数(可选,不指定的话显示預設行数(脚本中 RowMax = 4)

点评

好吧,在我研究的时候大神们已经帮我解决了所有问题。这个脚本居然还能用开关控制选项时候可用。何等强大  发表于 2014-6-1 22:44

评分

参与人数 1星屑 +100 收起 理由
Sion + 100 ·

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10079
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

5
 楼主| 发表于 2014-6-1 22:42:18 | 只看该作者
taroxd 发表于 2014-6-1 21:56
http://woodpenguin.web.fc2.com/rgss3/choice_ex.html
简单翻译所需要的用法:
  事件中注释“選択肢位置( ...

看到里面有个选择帮助的功能,能教一下怎么用吗?
選択肢ヘルプ
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10079
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

6
 楼主| 发表于 2014-6-1 22:46:47 | 只看该作者
呼唤 塞糖 {:8_444:}@喵呜喵5  
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21701
在线时间
9422 小时
注册时间
2012-6-19
帖子
7119

开拓者短篇九导演组冠军

7
发表于 2014-6-1 22:53:07 | 只看该作者
VIPArcher 发表于 2014-6-1 22:46
呼唤 塞糖 @喵呜喵5


响应楼主号召无耻的过来求糖

评分

参与人数 3星屑 +125 收起 理由
david_ng223 + 15 果斷把图收下了~XD
Sion + 100 ·
VIPArcher + 10 高清大图好评!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者 (暗夜天使)

卑微的梦

梦石
0
星屑
523
在线时间
820 小时
注册时间
2013-2-23
帖子
1185

短篇九勇士组季军

8
发表于 2014-6-1 22:54:23 | 只看该作者
呼唤错了吧?是@Sion

点评

soga  发表于 2014-6-1 23:02
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22973
在线时间
8639 小时
注册时间
2011-12-31
帖子
3367
9
发表于 2014-6-2 14:50:21 | 只看该作者
VIPArcher 发表于 2014-6-1 22:42
看到里面有个选择帮助的功能,能教一下怎么用吗?
選択肢ヘルプ


如圖在選項

注释中加入
択肢ヘルプ
xxxxⅹ
ⅹⅹⅹ
yyyy(最多四行)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 15:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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