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

Project1

 找回密码
 注册会员
搜索

求改脚本!地图显示变量的扩展!

查看数: 2214 | 评论数: 5 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-5-7 18:03

正文摘要:

本帖最后由 雷影 于 2015-5-7 19:26 编辑 在图书馆找到一个芙蕾雅写的地图上显示变量的脚本! 自己想多加但东西的,显示佣兵等级和佣兵积分! 改了半天不得要领,求救,目前有2个问题, 一是,显示的文字重叠在一 ...

回复

雷影 发表于 2015-5-7 21:27:37
感谢楼上!第一个问题解决了!第二个问题,再开一贴问吧!
cinderelmini 发表于 2015-5-7 20:45:34

  1.   #--------------------------------------------------------------------------
  2.   # ● 刷新
  3.   #--------------------------------------------------------------------------
  4.   def refresh
  5.     contents.clear

  6.     draw_text(0, line_height * 0, contents.width, line_height, $game_variables[Freya::WindowVariableID],2)#显示佣兵积分的变量      
  7.     contents.font.size = 16

  8.     draw_text(0, line_height * 1, contents.width, line_height, $game_system.variable_show_text)#显示佣兵积分字样

  9.     draw_text(0, line_height * 2, contents.width, line_height, $game_system.variable_show_text2) #显示佣兵等级字样

  10.     draw_text(0, line_height * 3, contents.width, line_height, $game_system.variable_show_text3,2) #显示Renk
  11.     #上面的文字重叠了怎么改 才行?
  12.     contents.font.size = Font.default_size
  13.   end
复制代码
唔…………窝是个好人…………

点评

虽然不知道帧的问题!不过这个显示信息只有和公会NPC接任务对话时才会调用显示,用来对比当前等级和任务等级之差用的!不会占多少资源吧?  发表于 2015-5-7 21:03
哦!谢谢!应该就是这个了!  发表于 2015-5-7 21:00

评分

参与人数 1星屑 +200 收起 理由
VIPArcher + 200 是好人还不把每帧都重绘改掉(不对.

查看全部评分

tseyik 发表于 2015-5-7 20:36:45
本帖最后由 tseyik 于 2015-5-7 20:49 编辑

你可試試這個
設定例
  ITEM  = [
  {:icon_id => 0,:name => "金",:afterword => "枚",:variable_id => 22,:switch_id => 98,:x => 0,:y => 0,:width => 120,:name_c => 6},
  {:icon_id => 143,:name => "変数2",:afterword => " 個",:variable_id => 2,:switch_id => 1,:x => 0,:y => 24,:width => 120,:name_c => 16},
  {:icon_id => 125,:afterword => " 個",:variable_id => 3,:switch_id => 1,:x => 0,:y => 48,:width => 120,:name_c => 16}
  ]
開関99on,開関1off

開関99on,開関1on
  1. #==============================================================================
  2. # ■ RGSS3 レギュラー変数ウィンドウ Ver1.03 by 星潟
  3. #------------------------------------------------------------------------------
  4. # 特定変数をマップ及び戦闘中に表示し続けるウィンドウを作成します。
  5. # ウィンドウのフォントサイズ、幅、高さはもちろん
  6. # スイッチによるウィンドウの表示可否や、各変数項目の表示可否も設定できます。
  7. #------------------------------------------------------------------------------
  8. # Ver1.01 各部への説明を追加。
  9. #         項目内に:afterwordを追加。
  10. #         項目ハッシュ内の:icon_id、:name、:afterwordが
  11. #         省略されていても機能するように仕様を変更。
  12. #
  13. # Ver1.02 戦闘時に情報ビューポートに表示される物より下に表示されるように変更。
  14. #
  15. # Ver1.03 戦闘時に使わない場合の処理を修正。
  16. #==============================================================================
  17. module W_REGULAR
  18.   
  19.   #マップ上でレギュラー変数ウィンドウを表示するか否かを設定します。
  20.   #true => 使用する/false => 使用しない
  21.   
  22.   M_USE  = true
  23.   
  24.   #マップでのウィンドウ表示許可スイッチを設定します。
  25.   
  26.   M_SID  = 99
  27.   
  28.   #マップでのウィンドウのX座標を指定します。
  29.   
  30.   M_W_X   = 0
  31.   
  32.   #マップでのウィンドウのY座標を指定します。
  33.   
  34.   M_W_Y   = 0
  35.   
  36.   #戦闘でレギュラー変数ウィンドウを表示するか否かを設定します。
  37.   #true => 使用する/false => 使用しない
  38.   
  39.   B_USE  = true
  40.   
  41.   #戦闘でのウィンドウ表示許可スイッチを設定します。
  42.   
  43.   B_SID  = 100
  44.   
  45.   #戦闘でのウィンドウのX座標を指定します。
  46.   
  47.   B_W_X   = 400
  48.   
  49.   #戦闘でのウィンドウのY座標を指定します。
  50.   
  51.   B_W_Y   = 200
  52.   
  53.   #ウィンドウ内に記述される文字のフォントサイズを指定します。
  54.   
  55.   FSIZE  = 24
  56.   
  57.   #ウィンドウの幅を設定します。
  58.   
  59.   WIDTH  = 144
  60.   
  61.   #ウィンドウの高さを設定します。
  62.   
  63.   HEIGHT = 96
  64.   
  65.   #ウィンドウ内の項目を設定します。
  66.   #各項目の最後は必ず「,」(鍵括弧は除く)で区切って下さい。
  67.   #配列内のハッシュを追加/削除/設定する事で
  68.   #ウィンドウ内の項目の編集が可能です。
  69.   
  70.   #それぞれの項目は
  71.   #{:icon_id => 1(項目のアイコンID。0を指定するか省略すると
  72.   #                アイコンを描写せず、そのまま項目名を描写する)
  73.   # :name => "項目の名前"(必ず""で囲む。""を指定するか省略すると描写しない),
  74.   # :afterword => 1(後付けで表示する変数の値の単位。
  75.   #                  ""を指定するか省略すると描写しない),
  76.   # :variable_id => 1(表示する変数のID),
  77.   # :switch_id => 1(表示許可を示すスイッチID),
  78.   # :x => 0(ウィンドウ内のx座標),
  79.   # :y => 0(ウィンドウ内のy座標),
  80.   # :width => 65(ウィンドウ内での表示幅),
  81.   # :name_c => 16(項目の名前を描写する際の文字色)
  82.   #}
  83.   #これで1セットとなっています。
  84.   #データ更新の際は、x座標とy座標、そして表示幅とフォントサイズを元に
  85.   #その領域を消去する仕様になっており、処理は比較的軽めに抑えてありますが
  86.   #複数項目で領域をかぶせた場合、片方の更新の際に
  87.   #もう片方の表示の一部が消えてしまう可能性がありますので
  88.   #表示領域を被せないように微調整してやって下さい。
  89.   
  90.   ITEM  = [
  91.   {:icon_id => 0,:name => "金",:afterword => "枚",:variable_id => 22,:switch_id => 98,:x => 0,:y => 0,:width => 120,:name_c => 6},
  92.   {:icon_id => 143,:name => "変数2",:afterword => " 個",:variable_id => 2,:switch_id => 1,:x => 0,:y => 24,:width => 120,:name_c => 16},
  93.   {:icon_id => 125,:afterword => " 個",:variable_id => 3,:switch_id => 1,:x => 0,:y => 48,:width => 120,:name_c => 16}
  94.   ]
  95.   
  96. end
  97. class Scene_Base
  98.   #--------------------------------------------------------------------------
  99.   # レギュラーウィンドウを設定
  100.   #--------------------------------------------------------------------------
  101.   def create_regular_window
  102.     @regular_window = Window_Regular.new
  103.   end
  104. end
  105. class Window_Regular < Window_Base
  106.   #--------------------------------------------------------------------------
  107.   # 初期化
  108.   #--------------------------------------------------------------------------
  109.   def initialize
  110.    
  111.     #設定データからウィンドウを生成。
  112.    
  113.     super(x, y, width, height)
  114.    
  115.     #設定データからフォントサイズを指定。
  116.    
  117.     self.contents.font.size = W_REGULAR::FSIZE
  118.    
  119.     self.z = 10000
  120.    
  121.     #全ての項目を記述。
  122.    
  123.     draw_all_item
  124.    
  125.     #可視フラグから可視状態を変更。
  126.    
  127.     self.visible = visible_flag
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ウィンドウのX座標を指定
  131.   #--------------------------------------------------------------------------
  132.   def x
  133.    
  134.     #マップか戦闘中かでX座標を変更。
  135.     #どちらでもない場合はとりあえず0を返す。
  136.    
  137.     return W_REGULAR::M_W_X if SceneManager.scene_is?(Scene_Map)
  138.     return W_REGULAR::B_W_X if SceneManager.scene_is?(Scene_Battle)
  139.     0
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ウィンドウのY座標を指定
  143.   #--------------------------------------------------------------------------
  144.   def y
  145.    
  146.     #マップか戦闘中かでY座標を変更。
  147.     #どちらでもない場合はとりあえず0を返す。
  148.    
  149.     return W_REGULAR::M_W_Y if SceneManager.scene_is?(Scene_Map)
  150.     return W_REGULAR::B_W_Y if SceneManager.scene_is?(Scene_Battle)
  151.     0
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # 可視フラグを取得
  155.   #--------------------------------------------------------------------------
  156.   def visible_flag
  157.    
  158.     #マップか戦闘中かで可視フラグ判定用スイッチを変更。
  159.     #どちらでもない場合はとりあえずfalseを返す。
  160.    
  161.     return $game_switches[W_REGULAR::M_SID] if SceneManager.scene_is?(Scene_Map)
  162.     if SceneManager.scene_is?(Scene_Battle)
  163.       return $game_switches[W_REGULAR::B_SID]
  164.     end
  165.     false
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ウィンドウの幅を指定
  169.   #--------------------------------------------------------------------------
  170.   def width
  171.    
  172.     #設定データから幅を取得。
  173.    
  174.     W_REGULAR::WIDTH
  175.    
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ウィンドウの高さを指定
  179.   #--------------------------------------------------------------------------
  180.   def height
  181.    
  182.     #設定データから高さを取得。
  183.    
  184.     W_REGULAR::HEIGHT
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # 全ての項目を描写
  188.   #--------------------------------------------------------------------------
  189.   def draw_all_item
  190.    
  191.     #全項目のデータ取得用配列を生成。
  192.    
  193.     @item_variables = []
  194.    
  195.     #項目別のデータを取得し、個別リフレッシュを実行。
  196.    
  197.     W_REGULAR::ITEM.each_with_index { |item, i_data|
  198.     rect = Rect.new(item[:x], item[:y], item[:width], W_REGULAR::FSIZE)
  199.     s_id = W_REGULAR::ITEM[i_data][:switch_id]
  200.     v_id = W_REGULAR::ITEM[i_data][:variable_id]
  201.     @item_variables.push([$game_switches[s_id], $game_variables[v_id],[rect]])
  202.     part_refresh(i_data, true)
  203.     }
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # 更新
  207.   #--------------------------------------------------------------------------
  208.   def update
  209.    
  210.     #スーパークラスの処理を実行。
  211.    
  212.     super
  213.    
  214.     #現在の可視状態が可視フラグと異なる時
  215.     #全項目を再描写した上で処理を中断する。
  216.    
  217.     if self.visible != visible_flag
  218.       self.visible = visible_flag
  219.       return draw_all_item
  220.     end
  221.    
  222.     #各項目を個別リフレッシュする。
  223.    
  224.     @item_variables.each_index {|i_data|
  225.     part_refresh(i_data)
  226.     }
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # 各項目のリフレッシュ
  230.   #--------------------------------------------------------------------------
  231.   def part_refresh(i_data, first = false)
  232.    
  233.     #スイッチID、変数IDを取得
  234.    
  235.     s_id = W_REGULAR::ITEM[i_data][:switch_id]
  236.     v_id = W_REGULAR::ITEM[i_data][:variable_id]
  237.    
  238.     #初回描写ではなく、表示フラグに変更がなく、変数の変更もない場合は
  239.     #リフレッシュを行わない。
  240.    
  241.     return if !first && $game_switches[s_id] == @item_variables[i_data][0] && $game_variables[v_id] == @item_variables[i_data][1]
  242.    
  243.     #項目描写範囲の矩形を取得。
  244.    
  245.     rect = @item_variables[i_data][2][0]
  246.    
  247.     #項目描写範囲内の既存の描写を消去する。
  248.    
  249.     self.contents.clear_rect(rect)
  250.    
  251.     #表示フラグがOFFの場合、処理を中断する。
  252.    
  253.     return if !$game_switches[s_id]
  254.    
  255.     #項目データを最新のデータに変更する。
  256.    
  257.     @item_variables[i_data] = [$game_switches[s_id], $game_variables[v_id],[rect]]
  258.    
  259.     #アイコンID設定がされており、なおかつIDが0でない場合は
  260.     #アイコンを描写する。
  261.    
  262.     if W_REGULAR::ITEM[i_data][:icon_id] != nil && W_REGULAR::ITEM[i_data][:icon_id] != 0
  263.       draw_icon(W_REGULAR::ITEM[i_data][:icon_id], rect.x, rect.y)
  264.       
  265.       #矩形を複製する。
  266.       
  267.       rect2 = rect.clone
  268.       
  269.       #項目名が設定されており、なおかつ設定内容が空でない場合は項目名を描写する。
  270.       
  271.       if W_REGULAR::ITEM[i_data][:name] != nil && W_REGULAR::ITEM[i_data][:name] != ""
  272.         
  273.         #複製した矩形のx座標をアイコン分ずらす。
  274.         
  275.         rect2.x += 24
  276.         
  277.         #変更を行った矩形情報を用いて
  278.         #指定色で項目名を描写する。
  279.         
  280.         self.contents.font.color = text_color(W_REGULAR::ITEM[i_data][:name_c])
  281.         draw_text(rect2, W_REGULAR::ITEM[i_data][:name], 0)
  282.       end
  283.     else
  284.       
  285.       #項目名が設定されており、なおかつ設定内容が空でない場合は項目名を描写する。
  286.       
  287.       if W_REGULAR::ITEM[i_data][:name] != nil && W_REGULAR::ITEM[i_data][:name] != ""
  288.         
  289.         #指定色で項目名を描写する。
  290.         
  291.         self.contents.font.color = text_color(W_REGULAR::ITEM[i_data][:name_c])
  292.         draw_text(rect, W_REGULAR::ITEM[i_data][:name], 0)
  293.         
  294.       end
  295.     end
  296.    
  297.     #文字描写色を元に戻す。
  298.    
  299.     self.contents.font.color = normal_color
  300.    
  301.     #描写する変数の値を文字列として取得。
  302.    
  303.     text = $game_variables[v_id].to_s
  304.    
  305.     #単位が設定されており、なおかつ空でない場合は
  306.     #変数の文字列の後に単位の文字列を加える。
  307.    
  308.     if W_REGULAR::ITEM[i_data][:afterword] != nil && W_REGULAR::ITEM[i_data][:afterword] != ""
  309.       text = text + W_REGULAR::ITEM[i_data][:afterword]
  310.     end
  311.    
  312.     #矩形情報を元に文字列を描写する。
  313.    
  314.     draw_text(rect, text, 2)
  315.    
  316.   end
  317. end
  318. class Scene_Map < Scene_Base
  319.   #--------------------------------------------------------------------------
  320.   # 全ウィンドウの作成
  321.   #--------------------------------------------------------------------------
  322.   alias create_all_windows_rw create_all_windows
  323.   def create_all_windows
  324.    
  325.     #本来の処理を実行する。
  326.    
  327.     create_all_windows_rw
  328.    
  329.     #レギュラー変数ウィンドウをマップで使用する設定の場合は作成する。
  330.    
  331.     create_regular_window if W_REGULAR::M_USE
  332.    
  333.   end
  334. end
  335. class Scene_Battle < Scene_Base
  336.   #--------------------------------------------------------------------------
  337.   # 全ウィンドウの作成
  338.   #--------------------------------------------------------------------------
  339.   alias create_all_windows_rw create_all_windows
  340.   def create_all_windows
  341.    
  342.     #本来の処理を実行する。
  343.    
  344.     create_all_windows_rw
  345.    
  346.     #レギュラーウィンドウを戦闘で使用する設定の場合は作成する。
  347.    
  348.     if W_REGULAR::B_USE
  349.       
  350.       #レギュラーウィンドウ用ビューポートを作成。
  351.       
  352.       create_regular_viewport
  353.       
  354.       #ウィンドウを作成。
  355.       
  356.       create_regular_window
  357.       
  358.       #ウィンドウにビューポートを設定。
  359.       
  360.       @regular_window.viewport = @regular_window_viewport
  361.    
  362.     end
  363.    
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # レギュラーウィンドウ用ビューポート作成
  367.   #--------------------------------------------------------------------------
  368.   def create_regular_viewport
  369.    
  370.     #ビューポートを作成。
  371.    
  372.     @regular_window_viewport = Viewport.new
  373.    
  374.     #ビューポートの座標は情報ビューポートより1低い座標にする。
  375.    
  376.     @viewport.z = @info_viewport.z - 1
  377.    
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # スプライトセットの解放
  381.   #--------------------------------------------------------------------------
  382.   alias dispose_spriteset_rw dispose_spriteset
  383.   def dispose_spriteset
  384.    
  385.     #本来の処理を実行。
  386.    
  387.     dispose_spriteset_rw
  388.    
  389.     #レギュラーウィンドウ用ビューポートを解放。
  390.    
  391.     @regular_window_viewport.dispose if W_REGULAR::B_USE
  392.    
  393.   end
  394. end
复制代码
喵呜喵5 发表于 2015-5-7 19:53:57
本帖最后由 喵呜喵5 于 2015-5-7 19:55 编辑

每描绘一次文字,对
contents.rect.x
增加描绘文字的长度

增加的长度请自己想办法搞定,实在搞不定,插入我的基础脚本,里面有一个计算文字大小的方法…………哦你不想用我的基础脚本,那还是你自己搞定吧,除此以外,由于文字描绘长度可能超过窗口宽度,所以记得再修改窗口宽度,实在搞不定,插入我的基础脚本,里面有一个计算文字大小的方法…………哦你不想用我的基础脚本,那还是你自己搞定吧

点评

她们这些基础脚本都是一些底层的通用方法的实现,应该很少会出现冲突吧。  发表于 2015-5-7 20:46
Taro的基础脚本我不知道,如果我的基础脚本都和其他人的脚本起冲突的话,那我的其他脚本也必定会和那个脚本起冲突  发表于 2015-5-7 20:42
长度倒是不需要改了!就是要改高度!两行字重叠了啊  发表于 2015-5-7 20:32
其實m5大大的基础脚本和xd大大的基础脚本會不會跟其他基础脚本/腳本起衝突的說?  发表于 2015-5-7 20:15

评分

参与人数 1星屑 +1 收起 理由
喵kano + 1 23333

查看全部评分

VIPArcher 发表于 2015-5-7 19:14:46
自己不会改的话,那就换一个脚本吧
https://rpg.blue/home.php?mod=sp ... o=blog&id=12023

点评

这种每帧都刷新的脚本哪里好啦?  发表于 2015-5-7 19:41
那你就加上那个基础脚本嘛=。=  发表于 2015-5-7 19:40
喵呜喵的脚本我看过了!还需要基础脚本支持什么的!!我上面这脚本就是显示文字位置重叠的问题,懂行的稍微看一下就会改的吧  发表于 2015-5-7 19:24
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-16 03:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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