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

Project1

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

[已经解决] 如何改变 敌人名称 的颜色?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
106
在线时间
42 小时
注册时间
2019-1-14
帖子
13
跳转到指定楼层
1
发表于 2019-3-19 18:57:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
30星屑
本帖最后由 JasperCrazy 于 2019-3-19 18:57 编辑

在数据库里加了\C[6]想让敌人的名称变成黄色。
进入战斗时成功显示:

但在选取敌人的时候:

请大佬指点。

另外这里用了鼠标选敌脚本(如下),不过若与改变颜色冲突的话可以舍弃。
RUBY 代码复制
  1. class Scene_Battle
  2.   attr(:spriteset)
  3.   def create_enemy_window
  4.     @enemy_window = Window_BattleEnemyInfo.new(@spriteset)
  5.     @enemy_window.set_handler(:ok,     method(:on_enemy_ok))
  6.     @enemy_window.set_handler(:cancel, method(:on_enemy_cancel))
  7.   end
  8.   alias_method :sion_mouse_choose_enemy_on_enemy_ok, :on_enemy_ok
  9.   def on_enemy_ok
  10.     if @enemy_window.index
  11.       Sound.play_ok
  12.       sion_mouse_choose_enemy_on_enemy_ok
  13.     else
  14.       Sound.play_buzzer
  15.     end
  16.   end
  17.   #方法覆盖
  18.   def on_skill_ok
  19.     @skill = @skill_window.item
  20.     BattleManager.actor.input.set_skill(@skill.id)
  21.     BattleManager.actor.last_skill.object = @skill
  22.     if !@skill.need_selection?
  23.       @skill_window.hide
  24.       next_command
  25.     elsif @skill.for_opponent?
  26.       @skill_window.hide ###
  27.       @skill_window.help_window.show ###
  28.       select_enemy_selection
  29.     else
  30.       select_actor_selection
  31.     end
  32.   end
  33.   #方法覆盖
  34.   def on_item_ok
  35.     @item = @item_window.item
  36.     BattleManager.actor.input.set_item(@item.id)
  37.     if !@item.need_selection?
  38.       @item_window.hide
  39.       next_command
  40.     elsif @item.for_opponent?
  41.       @item_window.hide ###
  42.       @item_window.help_window.show ###
  43.       select_enemy_selection
  44.     else
  45.       select_actor_selection
  46.     end
  47.     $game_party.last_item.object = @item
  48.   end
  49.   #方法覆盖
  50.   def on_enemy_cancel
  51.     @enemy_window.hide
  52.     case @actor_command_window.current_symbol
  53.     when :attack
  54.       @actor_command_window.activate
  55.     when :skill
  56.       @skill_window.show.activate ###
  57.     when :item
  58.       @item_window.show.activate ###
  59.     end
  60.   end
  61. end
  62. #
  63. class Window_BattleEnemyInfo < Window_Base
  64.   attr(:index)
  65.   def choosing_color
  66.     Color.new(255, 0, 0, 150)
  67.   end
  68.   #
  69.   def initialize(spriteset)
  70.     super(0, 0, 100, fitting_height(1))
  71.     @enemy_sprites = spriteset.enemy_sprites
  72.     @handler = {}
  73.     hide
  74.   end
  75.   def set_handler(symbol, method)
  76.     @handler[symbol] = method
  77.   end
  78.   #
  79.   def update
  80.     super
  81.     if active
  82.       update_mouse_choose_enemy
  83.       update_input
  84.     end
  85.   end
  86.   def update_mouse_choose_enemy
  87.     m_x = Mouse.x; m_y = Mouse.y
  88.     mouse_enemy = @enemy_sprites.reverse.find {|s| s.mouse_at_enemy?(m_x, m_y)}
  89.     if @mouse_enemy != mouse_enemy
  90.       enemy_unchoose
  91.       @mouse_enemy = mouse_enemy
  92.       enemy_choose
  93.     end
  94.   end
  95.   #
  96.   def update_input
  97.     if Input.trigger?(:C)
  98.       if @mouse_enemy
  99.         @last_enemy = @mouse_enemy
  100.         enemy_unchoose
  101.       else
  102.         @index = nil
  103.       end
  104.       @handler[:ok].call
  105.     elsif Input.trigger?(:B)
  106.       @handler[:cancel].call
  107.     end
  108.   end
  109.   def refresh
  110.   end
  111.   #
  112.   def enemy_choose
  113.     if @mouse_enemy
  114.       @enemy_before_choose_color = @mouse_enemy.color.clone
  115.       @mouse_enemy.color = choosing_color
  116.       @index = $game_troop.alive_members.index(@mouse_enemy.battler)
  117.       name = $game_troop.alive_members[@index].name
  118.       self.width = contents.text_size(name).width + 10 + standard_padding * 2
  119.       create_contents
  120.       draw_text(0, 0, contents_width, contents_height, name, 1)
  121.       self.x = @mouse_enemy.x - width / 2
  122.       self.y = @mouse_enemy.y
  123.       open
  124.     end
  125.   end
  126.   def enemy_unchoose
  127.     if @mouse_enemy
  128.       @mouse_enemy.color = @enemy_before_choose_color
  129.       @mouse_enemy = nil
  130.       close
  131.     end
  132.   end
  133.   #
  134.   def activate
  135.     select_last_enemy
  136.     super
  137.   end
  138.   #
  139.   def hide
  140.     self.active = false
  141.     enemy_unchoose
  142.     close
  143.     super
  144.   end
  145.  
  146.  
  147.   def select_last_enemy
  148.     @last_enemy && @last_enemy.opacity > 0 ?
  149.       Mouse.set_pos(@last_enemy.x, @last_enemy.y - @last_enemy.height / 2) :
  150.       select_first_enemy
  151.   end
  152.   def select_first_enemy
  153.     battler = $game_troop.alive_members[0]
  154.     if battler
  155.       enemy = @enemy_sprites.find {|s| s.battler == battler}
  156.       Mouse.set_pos(enemy.x, enemy.y - enemy.height / 2)
  157.     end
  158.   end
  159.   #
  160.   def enemy
  161.     $game_troop.alive_members[@index]
  162.   end
  163. end
  164.  
  165. class Sprite_Battler
  166.   def mouse_at_enemy?(mx, my)
  167.     dx = mx - x + ox
  168.     dy = my - y + oy
  169.     return if opacity == 0 || dx < 0 || dx > width || dy < 0 || dy > height
  170.     return bitmap.get_pixel(dx, dy).alpha > 0
  171.   end
  172. end
  173. class Spriteset_Battle
  174.   attr(:enemy_sprites)
  175. end

最佳答案

查看完整内容

在63行的class Window_BattleEnemyInfo < Window_Base类里找到112行的def enemy_choose 对120行的draw_text(0, 0, contents_width, contents_height, name, 1)作出修改。 修改的方法参考Window_Base里的draw_text_ex(绘制带有控制符的文本) 因为Window_BattleEnemyInfo继承自Window_Base,所以控制符的相关方法应该是可以直接使用的 暂时有点忙,迟一点调试一下看看 ...

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

2
发表于 2019-3-19 18:57:40 | 只看该作者
在63行的class Window_BattleEnemyInfo < Window_Base类里找到112行的def enemy_choose
对120行的draw_text(0, 0, contents_width, contents_height, name, 1)作出修改。

修改的方法参考Window_Base里的draw_text_ex(绘制带有控制符的文本)
因为Window_BattleEnemyInfo继承自Window_Base,所以控制符的相关方法应该是可以直接使用的



暂时有点忙,迟一点调试一下看看

点评

试了试直接把120行改成 draw_text_ex(0, 0, name) , 可以显示颜色但窗口太宽了,似乎会把“\C[6]”也算进字符长度里面,不知道该怎么调整。求大佬指教。  发表于 2019-3-20 12:38
用头画头像,用脚写脚本
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-24 08:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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