Project1

标题: 事件名称显示脚本的错误 [打印本页]

作者: 落雪鸦杀    时间: 2015-10-4 15:54
标题: 事件名称显示脚本的错误

这是错误截图,该错误发生在主界面开始游戏之后。
每个事件的设置如下图,之前没有加入update_namepop同样报错。
而且我在事件名称处只输入了汉语字符及英语字符,没有设置图标和变量。
以下是脚本代码。

RUBY 代码复制
  1. #==============================================================================
  2. # ★ RGSS3_ネームポップ Ver1.11
  3. #==============================================================================
  4. =begin
  5.  
  6. 元作者:tomoaky
  7. webサイト:ひきも記 ([url]http://hikimoki.sakura.ne.jp/[/url])
  8.  
  9. イベント名かイベント実行内容の先頭に『注釈』コマンドで
  10. <namepop 文字列>
  11. と記述してください。
  12. イベントキャラクターの頭上に文字列が表示されます。
  13.  
  14. イベント名で指定した場合はイベント全ページに適用されますが、
  15. 優先度は注釈コマンドの方が高くなっています。
  16.  
  17. 文字を消したい場合は <namepop none> としてください。
  18. =end
  19.  
  20. =begin
  21. 改造:111
  22. webサイト:[url]http://gamecome.hateblo.jp/[/url]
  23.  
  24. 2015.1.18
  25. 変数を表示できるようにしてみました。
  26. 2015.1.22
  27. アイコンも表示できるように。
  28. @@で包む表記を複数利用できるように。
  29. 2015.1.26
  30. フォント変更も利用できるように。
  31.  
  32. 変数の値を変えた後は
  33. スクリプトから
  34. update_namepop
  35. と書いて、更新しないと反映されません
  36.  
  37. =end
  38. module TMNPOP
  39.   def self.create_font(params = nil)
  40.     font = Font.new()
  41.     if(params)
  42.       params.each{|key , value|
  43.         font.send(key.to_s + "=", value)
  44.       }
  45.     end
  46.     font
  47.   end  
  48. end
  49.  
  50. #==============================================================================
  51. # □ 設定項目
  52. #==============================================================================
  53. module TMNPOP
  54.   FONT_SIZE = 22          # フォント指定しない場合の、フォントサイズ
  55.   FONT_OUT_ALPHA = 255    # フォント指定しない場合の、フォントの縁取り不透明度
  56.   #
  57.   # 見本のフォント(それぞれFONT(0)~FONT(4)で指定、追加も可能)
  58.   #
  59.   FONT = [
  60.     self.create_font() ,
  61.     self.create_font({:out_color => Color.new(255,0,0,128) }) ,
  62.     self.create_font({:size => 32 , :bold => true , :shadow => true}) ,
  63.     self.create_font({:italic => true , :outline => false ,
  64.       :color => Color.new(120,120,255,255) }) ,
  65.     self.create_font({:size => 18 , :out_color => Color.new(255,255,255,128) ,
  66.       :bold => true , :shadow => true , :color => Color.new(0,0,0,255) })      
  67.   ]
  68. end
  69.  
  70. #==============================================================================
  71. # ■ Game_Character
  72. #==============================================================================
  73. class Game_Character
  74.   #--------------------------------------------------------------------------
  75.   # ● 公開インスタンス変数
  76.   #--------------------------------------------------------------------------
  77.   attr_accessor :namepop                  # ポップアップテキスト
  78.   attr_accessor :will_namepop_update
  79.   #--------------------------------------------------------------------------
  80. end
  81.  
  82. #==============================================================================
  83. # ■ Game_Event
  84. #==============================================================================
  85. class Game_Event < Game_Character
  86.   #--------------------------------------------------------------------------
  87.   # ● イベントページの設定をクリア
  88.   #--------------------------------------------------------------------------
  89.   alias tmnpop_game_event_clear_page_settings clear_page_settings
  90.   def clear_page_settings
  91.     tmnpop_game_event_clear_page_settings
  92.     @namepop = nil
  93.     @will_namepop_update = false
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● イベントページの設定をセットアップ
  97.   #--------------------------------------------------------------------------
  98.   alias tmnpop_game_event_setup_page_settings setup_page_settings
  99.   def setup_page_settings
  100.     tmnpop_game_event_setup_page_settings
  101.     @namepop = nil
  102.     @namepop_sprite_strs = nil
  103.     if @list
  104.       @namepop = $1 if /<namepop\s*(\S+?)>/i =~ @event.name
  105.       @list.each do |list|
  106.         if list.code == 108 || list.code == 408
  107.           @namepop = $1 if /<namepop\s*(\S+?)>/i =~ list.parameters[0]
  108.         else
  109.           break
  110.         end
  111.       end
  112.     end
  113.   end
  114. end
  115.  
  116. #==============================================================================
  117. # ■ Sprite_Character
  118. #==============================================================================
  119. class Sprite_Character < Sprite_Base
  120.   #--------------------------------------------------------------------------
  121.   # ● 解放
  122.   #--------------------------------------------------------------------------
  123.   alias tmnpop_sprite_character_dispose dispose
  124.   def dispose
  125.     dispose_namepop
  126.     tmnpop_sprite_character_dispose
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● フレーム更新
  130.   #--------------------------------------------------------------------------
  131.   alias tmnpop_sprite_character_update update
  132.   def update
  133.     tmnpop_sprite_character_update
  134.     update_namepop
  135.     if @character.namepop != @namepop or @character.will_namepop_update
  136.       @namepop = @character.namepop
  137.       @character.will_namepop_update = false
  138.       start_namepop
  139.     end
  140.   end
  141.  
  142.   #
  143.   # @~@と普通の文字とを分割する
  144.   #
  145.   def _variables_split(namepop)
  146.     tag_on = false
  147.     str = ""
  148.     strs = []
  149.     namepop.each_char do |char|
  150.       if char == "@"
  151.         if tag_on
  152.           str += char
  153.           char = ""
  154.         end
  155.         strs << str.clone
  156.         str = ""
  157.         tag_on = !tag_on
  158.       end
  159.       str += char
  160.     end
  161.     strs << str # 最終の@から行末まで
  162.     strs.delete("")
  163.     strs
  164.   end
  165.  
  166.   #
  167.   # 変数、アイコン変換
  168.   #
  169.    def _namepop_change(str)
  170.     obj = {:value => str , :font => nil , :type => "String"}
  171.     if str =~ /@.+?@/
  172.       str.upcase!
  173.       str.delete!("@")
  174.       # 変数(V[])を先に置換 *但し変数を囲む変数は置換されない
  175.       str.gsub!(/V\[(\d+?)\]/){|text|
  176.         $game_variables[$1.to_i]
  177.       }
  178.       # 個別タグがまだある場合、反映
  179.       str.scan(/((I|V|FONT)\[(\d+?)\])/).each{|tmp|
  180.         if tmp[1] == "I"
  181.           obj[:value] = tmp[2].to_i
  182.           obj[:type] = "Icon"
  183.           return obj
  184.         end
  185.         if tmp[1] == "FONT"
  186.           obj[:font] = TMNPOP::FONT[tmp[2].to_i]
  187.           str.sub!(tmp[0] , "")
  188.         elsif tmp[1] == "V"
  189.           obj[:value] = $game_variables[tmp[2].to_i]
  190.           str.sub!(tmp[0] , "")
  191.         end
  192.       }
  193.       obj[:value] = str
  194.     end
  195.     obj
  196.   end
  197.  
  198.   #--------------------------------------------------------------------------
  199.   # ○ namepopの開始
  200.   #--------------------------------------------------------------------------
  201.   def start_namepop
  202.     dispose_namepop
  203.     return if @namepop == "none" || @namepop == nil
  204.     @namepop_sprite = ::Sprite.new(viewport)
  205.  
  206.     namepop_draws = _variables_split(@namepop)
  207.     # 分けた文字列(アイコン)を描画
  208.     total_width = 0
  209.     best_height = 0
  210.     tmp_b = Bitmap.new(Graphics.width , Graphics.height)
  211.     namepop_draws.each{|str|
  212.       obj = _namepop_change(str)
  213.       if obj[:type] == "Icon" # アイコン描画
  214.         icon_index = obj[:value]
  215.         icon_bitmap = Cache.system("Iconset")
  216.         r = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  217.         tmp_b.blt(total_width, 0, icon_bitmap, r)
  218.       else # 文字列描画
  219.         str = obj[:value]
  220.         b = Bitmap.new(1, 1)
  221.         if obj[:font]
  222.           b.font = obj[:font]
  223.         else
  224.           b.font.size = TMNPOP::FONT_SIZE
  225.           b.font.out_color.alpha = TMNPOP::FONT_OUT_ALPHA
  226.         end     
  227.         tmp_b.font = b.font
  228.         r = b.text_size(str)
  229.         # 縦が中央揃えになるよう調節
  230.         height_adjust = best_height == 0 ? 0 : (best_height - r.height) / 2
  231.         tmp_b.draw_text(total_width, height_adjust, r.width , r.height , str)
  232.       end
  233.       total_width += r.width
  234.       best_height = r.height if r.height > best_height
  235.     }
  236.     # 文字列(アイコン)を結合
  237.     @namepop_sprite.bitmap = Bitmap.new(total_width,  best_height)
  238.     @namepop_sprite.bitmap.blt(0, 0, tmp_b , @namepop_sprite.bitmap.rect)
  239.  
  240.     @namepop_sprite.ox = @namepop_sprite.width / 2
  241.     @namepop_sprite.oy = best_height
  242.     tmp_b.clear
  243.     update_namepop
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ○ namepopの更新
  247.   #--------------------------------------------------------------------------
  248.   def update_namepop
  249.     if @namepop_sprite
  250.       @namepop_sprite.x = x
  251.       @namepop_sprite.y = y - height
  252.       @namepop_sprite.z = z + 200
  253.     end
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ○ namepopの解放
  257.   #--------------------------------------------------------------------------
  258.   def dispose_namepop
  259.     if @namepop_sprite
  260.       @namepop_sprite.bitmap.dispose
  261.       @namepop_sprite.dispose
  262.       @namepop_sprite = nil
  263.     end
  264.   end
  265. end
  266.  
  267. #
  268. # ネームポップを更新させる
  269. #
  270. class Game_Interpreter
  271.   def update_namepop
  272.     $game_map.events.each_value{|event|
  273.       event.will_namepop_update = true
  274.     }  
  275.   end
  276. end

作者: 御之嵐    时间: 2015-10-5 01:00
本帖最后由 御之嵐 于 2015-10-5 01:02 编辑

我這邊
使用上沒有任何問題

事件是按下確認鍵後才會觸發
update_namepop
所以應該跟彈錯沒有太大的關係

依我猜測
這可能是腳本的衝突
或者  檢查一下看有沒有 自動執行、並行處理的事件正在執行其他腳本

可以開新的地圖測試這個 事件名稱顯示腳本 是否能正常使用
如果新地圖使用正常
那就是 之前那張地圖有事件跟腳本產生衝突了
作者: 百里_飞柳    时间: 2015-10-5 10:22
本帖最后由 百里_飞柳 于 2015-10-5 11:27 编辑

弹窗错误是因为你插入了两段相同的脚本。

然后这个脚本的用法难道不应该是
イベント名かイベント実行内容の先頭に『注釈』コマンドで  #翻译:事件名写在事件内容第一行的注释命令里
<namepop 文字列>

在事件页里的第一行放注释然后写这个吧,你怎么写到事件名字框去了……

好吧,我没有实际使用过这个脚本…不知道写到名字框去也有用_(:зゝ∠)_




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