Project1

标题: 如何在NPC头上显示名字? [打印本页]

作者: ROMB板    时间: 2012-5-9 20:46
标题: 如何在NPC头上显示名字?
本帖最后由 ROMB板 于 2012-5-10 15:56 编辑

求助,怎么弄?最好可以详细点dsu_plus_rewardpost_czw
作者: lsu666666    时间: 2012-5-9 20:51
本帖最后由 lsu666666 于 2012-5-9 20:52 编辑

显示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 = "黑体"
  15.   NAME_SIZE = 16
  16.   NAME_SHADOW = false
  17.   NAME_WIDTH = 120
  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
复制代码

作者: 春风莉露    时间: 2012-5-9 21:12
喔喔
通过开关来控制是否显示NPC名称,灵活好用。
这是效果。



显示NPC名称.rar (217.55 KB, 下载次数: 821)






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