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

Project1

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

[已经解决] 完美NPC名稱顯示腳本,如何降低優先度在淡出淡入之下?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
448 小时
注册时间
2011-10-9
帖子
184
跳转到指定楼层
1
发表于 2012-12-18 13:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 冷徹心扉 于 2012-12-18 14:14 编辑

其實不算什麼問題,只是希望能讓這個腳本更完美一點
以下是相當優秀且簡單的顯示NPC名稱腳本,只要在事件名稱輸入文字即可顯示,前綴EV開頭則不顯示,如EV001

有個小瑕疵是當畫面調用但入淡出、或顯示圖片時
該NPC名稱還是會顯示在最上層,有些不美觀
如果能夠修改其優先度就好了
  1.     #==============================================================================
  2.     # 顯示NPC名
  3.     #------------------------------------------------------------------------------
  4.     # 跟原版一樣,EV開頭的不顯示,逗號後加顏色代碼
  5.     # 修改某事件名的方法:
  6.     #   set_npc_name("新名", 事件ID, 地圖ID, 是否永久生效)
  7.     #     事件ID 為空時表示當前事件
  8.     #     地圖ID 為空時表示當前地圖
  9.     #     是否永久生效 默認永久,否則只允許修改當前地圖
  10.     #==============================================================================
  11.     # 參數設定
  12.     #==============================================================================
  13.     module NPC
  14.       NAME_FONT = "DFPHuaZongW5-B5"
  15.       NAME_SIZE = 11
  16.       NAME_SHADOW = true
  17.       NAME_WIDTH = 200
  18.     end
  19.     #==============================================================================
  20.     # 重定事件名
  21.     #==============================================================================
  22.     def set_npc_name(name, event_id = nil, map_id = nil, forever = true)
  23.       # 處理事件 ID
  24.       if event_id == nil
  25.         event_id = $game_map.interpreter.event_id
  26.       end
  27.       # 處理地圖 ID
  28.       if map_id == nil
  29.         $game_map.events[event_id].name = name
  30.         map_id = $game_map.map_id
  31.       else
  32.         map_id = map_id
  33.       end
  34.       return unless forever
  35.       data = load_data(sprintf("Data/Map%03d.rvdata", map_id))
  36.       # 更改名
  37.       data.events[event_id].name = name
  38.       save_data(data, sprintf("Data/Map%03d.rvdata", map_id))
  39.     end
  40.     #==============================================================================
  41.     # ■ Game_Character
  42.     #==============================================================================
  43.     class Game_Character
  44.       #--------------------------------------------------------------------------
  45.       # ◎ 定義實例變量
  46.       #--------------------------------------------------------------------------
  47.       attr_accessor :name                  # 名稱
  48.       #--------------------------------------------------------------------------
  49.       # ◎ 初始化對象
  50.       #--------------------------------------------------------------------------
  51.       alias character_ini initialize
  52.       def initialize
  53.         character_ini
  54.         @name = ""
  55.       end
  56.     end
  57.     #==============================================================================
  58.     # ■ Game_Event
  59.     #==============================================================================
  60.     class Game_Event < Game_Character
  61.       #--------------------------------------------------------------------------
  62.       # ◎ 定義實例變量
  63.       #--------------------------------------------------------------------------
  64.       attr_reader   :erased
  65.       #--------------------------------------------------------------------------
  66.       # ◎ 初始化對像
  67.       #     map_id : 地圖 ID
  68.       #     event  : 事件 (RPG::Event)
  69.       #--------------------------------------------------------------------------
  70.       alias event_ini initialize
  71.       def initialize(map_id, event)
  72.         event_ini(map_id, event)
  73.         @name = @event.name
  74.       end
  75.     end
  76.     #==============================================================================
  77.     # ■ Game_Player
  78.     #==============================================================================
  79.     #class Game_Player < Game_Character
  80.       #--------------------------------------------------------------------------
  81.       # ◎ 顯示主角名字
  82.       #--------------------------------------------------------------------------
  83.       #def name
  84.         #return $game_party.members[0].name
  85.       #end
  86.     #end
  87.     #==============================================================================
  88.     # ■ Game_Interpreter
  89.     #==============================================================================
  90.     class Game_Interpreter
  91.       #--------------------------------------------------------------------------
  92.       # ◎ 定義實例變量
  93.       #--------------------------------------------------------------------------
  94.       attr_reader   :event_id
  95.     end
  96.     #==============================================================================
  97.     # ■ Sprite_Character
  98.     #==============================================================================
  99.     class Sprite_Character < Sprite_Base
  100.       #--------------------------------------------------------------------------
  101.       # ◎ 初始化對象
  102.       #     viewport  : 視區
  103.       #     character : 角色 (Game_Character)
  104.       #--------------------------------------------------------------------------
  105.       def initialize(viewport, character = nil)
  106.         super(viewport)
  107.         @character = character
  108.         @balloon_duration = 0
  109.         ## 名稱
  110.         @name = @character.name
  111.         set_name_sprite
  112.         update
  113.       end
  114.       #--------------------------------------------------------------------------
  115.       # ◎ 釋放
  116.       #--------------------------------------------------------------------------
  117.       def dispose
  118.         dispose_balloon
  119.         super
  120.         ##
  121.         return if @name_sprite == nil
  122.         @name_sprite.bitmap.dispose
  123.         @name_sprite.dispose
  124.       end
  125.       #--------------------------------------------------------------------------
  126.       # ● 更新畫面
  127.       #--------------------------------------------------------------------------
  128.       def update
  129.         super
  130.         update_bitmap
  131.         self.visible = (not @character.transparent)
  132.         update_src_rect
  133.         self.x = @character.screen_x
  134.         self.y = @character.screen_y
  135.         self.z = @character.screen_z
  136.         self.opacity = @character.opacity
  137.         self.blend_type = @character.blend_type
  138.         self.bush_depth = @character.bush_depth
  139.         update_balloon
  140.         if @character.animation_id != 0
  141.           animation = $data_animations[@character.animation_id]
  142.           start_animation(animation)
  143.           @character.animation_id = 0
  144.         end
  145.         if @character.balloon_id != 0
  146.           @balloon_id = @character.balloon_id
  147.           start_balloon
  148.           @character.balloon_id = 0
  149.         end
  150.         ## 名稱可視和跟隨
  151.         unless @name_sprite == nil or @name_sprite.disposed?
  152.           if @character.is_a?(Game_Event) and @character.erased
  153.             @name_sprite.visible = false
  154.             return
  155.           else
  156.             @name_sprite.visible = true
  157.           end
  158.           if @character.is_a?(Game_Player) and @character.in_vehicle?
  159.             @name_sprite.visible = false
  160.             return
  161.           else
  162.             @name_sprite.visible = true
  163.           end
  164.           if @name != @character.name
  165.             @name = @character.name
  166.             refresh_name_sprite
  167.           end
  168.           @name_sprite.x = self.x - 80
  169.           @name_sprite.y = self.y - self.height - NPC::NAME_SIZE+2
  170.           @name_sprite.z = self.z+1
  171.         end
  172.       end
  173.       #--------------------------------------------------------------------------
  174.       # ○ 設定 NPC 名稱
  175.       #--------------------------------------------------------------------------
  176.       def set_name_sprite
  177.         return if @character.name[0, 2] == "EV"
  178.         return if @character.name == ""
  179.         return if @character.character_name == ""
  180.         return if @character.is_a?(Game_Event) and @character.erased
  181.         @color_board = Window_Base.new(0,0,33,33)
  182.         @color_board.visible = false
  183.         @name_sprite = Sprite.new
  184.         @name_sprite.bitmap = Bitmap.new(NPC::NAME_WIDTH, NPC::NAME_SIZE+2)
  185.         @name_sprite.bitmap.font.name = NPC::NAME_FONT
  186.         @name_sprite.bitmap.font.size = NPC::NAME_SIZE
  187.         @name_sprite.bitmap.font.shadow = NPC::NAME_SHADOW
  188.         refresh_name_sprite
  189.       end
  190.       #--------------------------------------------------------------------------
  191.       # ○ 更新 NPC 名稱
  192.       #--------------------------------------------------------------------------
  193.       def refresh_name_sprite
  194.         name,color_index = @name.split(/,/)
  195.         color_index = 0 if color_index == ""
  196.         @name_sprite.bitmap.font.color = @color_board.text_color(color_index.to_i)
  197.         @name_sprite.bitmap.clear
  198.         @name_sprite.bitmap.draw_text(0,0,160,NPC::NAME_SIZE+2,name,1)
  199.       end
  200.     end
复制代码
感謝a364774426大,這個問題糾結我好久了{:2_249:}

点评

170行的“@name_sprite.z”减小其值  发表于 2012-12-18 14:03
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-9-27 22:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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